Angular:每次指令更新时运行方法

时间:2015-01-23 01:47:32

标签: javascript angularjs

我希望每次角度指令更新时都运行一个函数。在我的例子中,我有一组模态配置,可用于模态标记模板。 每次模板由于模型的变化而用于生成模态时,我想运行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(){...})不起作用。

有人可以帮我弄清楚我做错了吗?

2 个答案:

答案 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){

})

这里我们将它注入两个控制器中,我们可以得到它。