我希望每次角度指令更新时都运行一个函数。在我的例子中,我有一组模态配置,可用于模态标记模板。 每次模板由于模型的变化而用于生成模态时,我想运行positionModal()方法。 当我改变模型时,链接功能中的$ watch似乎没有注意到,我无法想到其他任何方式。我尝试了一个post-link函数,认为在应用指令时会调用compile函数,但这似乎也不起作用。这是我的示例控制器:
MyApp.controller("ModalController", function () {
//Define scope vars
$scope.modals = [];
$scope.$on("modalTrigger", function (event, settings) {
$scope.modals.push(settings);
});
});
注意:我在这里简化了控制器 - 知道它可以工作。
以下是模板代码:
<div class="modalParent" ng-controller="ModalController">
<div id="{{modal.id}}" class="modal" ng-class="modal.type" ng-repeat="modal in modals">
<div class="content">
<h2 ng-show="modal.title">{{modal.title}}</h2>
<p>{{modal.message}}</p>
<button>{{modal.button}}</button>
</div>
</div>
</div>
该指令目前是这样的:
MyApp.directive("modalParent", function () {
var positionModals = function (element) {
element.find(".modal .content").each(function () {
//position logic here
});
};
return {
restrict: "C",
compile: function (tElement) {
positionModals(tElement);
}
};
});
注意:此处还简化了此目的。 当第一个模态被推送到数组时,positionModals()调用有效。之后,它停止工作。
我也尝试过使用链接功能,结果相同。范围。$ watch(modals,function(){...})不起作用。
有人可以帮我弄清楚我做错了吗?
答案 0 :(得分:1)
想出来! 我正在将指令应用于父级“.modalParent”。 在这种情况下,ng-repeated元素是模态本身“.modal”。 您希望该指令在模型更改时获取更新的元素上运行,因为每次实例化元素时都会调用链接函数,而不是坐下来观察父节点并尝试从那里更新。 希望这有助于某人。
答案 1 :(得分:0)
不是像这样调用,我的方法是在服务中编写它,并在控制器的任何地方注入服务,无论你想要获取该函数还是要通知的数据,
Services.js
as.service("xyzservice",function(factoryname){
//here the code goes...
})
现在注入Controller,
ac.controller("controllername",function(xyzservice){
})
ac.controller("controllername",function(servicename){
})
ac.controller("controllername",function(xyzservice){
})
这里我们将它注入两个控制器中,我们可以得到它。