我有一个 angular-bootstrap 模态弹出框,其中包含模板中的自定义指令:
模态.html
<div class="modal-header">
<h3 class="modal-title">Modal Header</h3>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<my-directive ng-model="test" ng-change="doSomething()" />
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" ng-click="upload()">Upload</button>
<button class="btn btn-warning" ng-click="cancel()">Cancel</button>
</div>
模态控件.js
app.controller('ModalCtrl', function ModalCtrl( $scope, $modalInstance ) {
$scope.test = 'empty';
$scope.upload = function() {
$scope.test = 'change!';
};
$scope.cancel = function() {
$modalInstance.dismiss('cancel');
};
});
我从我的主控制器打开模式弹出窗口,如下所示:
MainCtrl.js
var app = angular.module( 'myApp', [ 'ui.bootstrap' ] );
app.controller('MainCtrl', function MainCtrl( $scope, $modal ) {
$scope.openModal = function() {
var modalInstance = $modal.open({
templateUrl: '/assets/modals/Modal.html',
controller: 'ModalCtrl',
size: 'md'
});
};
});
正如您从上面的代码中看到的那样,模态模板包含我的自定义指令<my-directive>
,该指令将$scope.test
- 定义在ModalCtrl
- 作为它的模型,并且应该$scope.doSomething()
在该模型更改时调用。
自定义指令如下所示:
MyDirective.js
angular.module( 'myApp' ).directive( 'myDirective', function() {
return {
controller: function( $scope ) {
$scope.doSomething = function() {
console.log( 'doSomething() called! $scope.test now = ' + $scope.test );
};
},
link: function( $scope, el, att ) {
console.log( '$scope.test = ' + $scope.test );
},
template: '<div class="thumbnail"></div>'
};
} );
当模态弹出窗口打开时,控制台打印出$scope.test = empty
这正是我期望看到的。但是什么时候$scope.test
通过调用$scope.upload()
函数来改变ModalCtrl
什么都没有发生!我认为应该发生的$scope.doSomething()
是调用,然后应该在控制台中打印出来doSomething() called! $scope.test now = change!
。
任何帮助将不胜感激,这让我发疯!