2014-10-30 3 views
2

AngularUI 부트 스트랩 모달 대화 상자를 사용하고 있습니다 (아래 예 참조). 템플릿이 열리면 jQuery 이벤트를 트리거하려고합니다. modalInstance.opened 메서드를 사용하고 있지만 비어있는 개체가 있습니다.AngularJS Modal (ui.bootstrap.modal)이 모달을 연 후 jQuery 이벤트를 트리거 할 수 없습니다 (modalInstance.opened)

mycontroller.js

var app = angular.module('ui.bootstrap.demo'); 
app.controller('ModalDemoCtrl', function ($scope, $modal, $log) { 

    $scope.items = ['item1', 'item2', 'item3']; 
    $scope.open = function (size) { 

    var modalInstance = $modal.open({ 
    templateUrl: 'mytemplate.html', 
    controller: 'ModalInstanceCtrl', 
    size: size, 
    resolve: { 
     items: function() { 
      return $scope.items; 
     } 
    } 
    }); 

    modalInstance.result.then(function (selectedItem) { 
    // form submit. Works fine. 
    }); 

    modalInstance.opened.then(function (selectedItem) { 
    // I want to trigger jQuery event on form element 
    // When I try to access $("form") I am getting empty object 
    }); 
} 
}); 

app.controller('ModalInstanceCtrl', function ($scope, $modalInstance, items) { 
    $scope.form = { 
    name : "Default Name" 
    myItem : items[0] 
    } 
    $scope.ok = function() { 
    $modalInstance.close($scope.form); 
    }; 
}); 

mytemplate.html

<form> 
    <label>Name</label> 
    <input type="text" name="name" ng-bind="form.name" /> 
    ... 
</form> 
+0

JSFiddle : http://jsfiddle.net/vugncsbt/1/ +1이 좋은 질문이다. 그러나 우리가 무엇을하고 있는지 안다면 어쩌면 해결 방법을 제안 할 수 있습니까? jQuery에서 커스텀 이벤트를 발생시키는 폼이 필요합니까? – soktinpk

+0

'$ ("# myForm") .validate (validationConfig)'와 같은 jQuery 폼 유효성 검사를해야합니다. 내 응용 프로그램의 유효성 검사가 이미 jQuery로 작성 되었기 때문에 나는 angularJS 유효성 검사가 아닌 jQuery 유효성 검사를 사용해야합니다. – user2300875

답변

2

모달 내용이 공개 이벤트가 발생 매개자되지만 사용할 수 HTML 것을 만들어지지 않았기 때문에 나는 생각한다 dom.

0 초의 간단한 시간 초과는 이벤트 뒤로 이동합니다.

$timeout (function(){ 
     console.log(angular.element("form")); 
    },0); 

fiddle

+0

이 솔루션을 사용할 것입니다. soktinpk가'emit-event-when-loaded' 명령을 추가하는 것에 대해 언급했듯이, doc에서 말하는 것을 달성 할 수 없다면 modalInstance.opened 메소드의 사용법이 궁금합니다. ** 개설 - 콘텐츠 템플릿을 다운로드하고 모든 변수를 해결 한 후 모달을 열면 해결되는 약속 ** – user2300875

+0

@ user2300875 * 다운로드 *, 반드시 콘텐츠를 렌더링하지 않아도됩니다. 그것의 계약을 위반하지 않습니다. 변수는 해결되어야하며 컨텐츠는 준비되어야하지만 반드시 DOM에 추가 될 필요는 없습니다. – soktinpk

+0

이것은 효과적 이었지만 $ timeout을 의존성으로 추가하는 것을 잊지 마십시오 – mintedsky

1

사용자 지정 지침 emit-event-when-loaded을 작성하고 양식에 첨부 할 수

예 : HTML에서 그런

app.controller('ModalInstanceCtrl', function ($scope, $modalInstance, items) { 
    $scope.form = { 
     name: "Default Name", 
     myItem: items[0] 
    } 
    $scope.ok = function() { 
     $modalInstance.close($scope.form); 
    }; 
}).directive("emitEventWhenLoaded", function() { 
    return function() { 
     console.log($("form")); // $("form") is defined 
     angular.element("form").trigger("custom-event"); // do whatever you want 
    } 
}); 

:

<form emit-event-when-loaded> 
<label>Name</label> 
<input type="text" name="name" ng-bind="form.name" /> 
,

업데이트 바이올린 :에 관심있는 사람들을위한 http://jsfiddle.net/vugncsbt/3/