简而言之:
我尝试在我的指令中做这样的事情 - 即将模型的值更改为“触发”属性:
angular.element(element).on('hidden.bs.modal', function () {
scope.$apply(function () {
attrs.$set('trigger', null);
});
});
它不起作用。为什么?我应该用其他方式吗?
这是完整的故事:
我有一个在设置showRemoveDialog标志时触发的对话框。当用户单击删除按钮时设置此标志。
这是一个对话框的开始标签:
<div remove-dialog trigger="{{showRemoveDialog}}" class="modal fade" id="myModal">
然后我有一个指令removeDialog:
myApp.directive("removeDialog", function () {
return {
restrict: 'A',
link: function (scope, element, attrs, controller) {
angular.element(element).on('hidden.bs.modal', function () {
scope.$apply(function () {
attrs.$set('trigger', null);
});
});
attrs.$observe('trigger', function (newValue) {
if (newValue) {
angular.element(element).modal('show');
} else {
angular.element(element).modal('hide');
}
});
},
controller: 'DeleteController'
};
});
如您所见,我观察到trigger属性,当它更改为true(用户单击Remove按钮)时,我会显示对话框:
$scope.remove = function () {
$scope.showRemoveDialog = true;
};
它有效。
但是,如果触发器的值更改为false/null我想关闭它 - 例如单击取消按钮,或单击 X 图标。如果发生这两个操作之一,我需要将触发器值设置回false/null,以便下次用户单击“删除”按钮的值会从 false -> true 更改,并且我的对话框再次出现。
问题是这段代码不起作用:
angular.element(element).on('hidden.bs.modal', function () {
scope.$apply(function () {
attrs.$set('trigger', null);
});
});
我的意思是它不会将范围内的{{showRemoveDialog}}的值设置为 null。我已经尝试过 $apply 功能,但仍然处于等待状态。
我想我在角度上做错了什么。请帮忙。