Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular:每次指令更新时运行方法_Javascript_Angularjs - Fatal编程技术网

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

Javascript Angular:每次指令更新时运行方法,javascript,angularjs,Javascript,Angularjs,我希望每次angular指令更新时都能运行一个函数。在我的例子中,我有一个模态配置数组,用于模态标记模板。 每次由于模型中的更改而使用模板生成模态时,我都希望运行positionModal()方法。 范围。链接函数中的$watch在我更改模型时似乎没有注意到,我想不出任何其他方法来执行此操作。我尝试了一个post-link函数,认为应用该指令时会调用编译函数,但这似乎也不起作用。以下是我的示例控制器: MyApp.controller("ModalController", function ()

我希望每次angular指令更新时都能运行一个函数。在我的例子中,我有一个模态配置数组,用于模态标记模板。 每次由于模型中的更改而使用模板生成模态时,我都希望运行positionModal()方法。 范围。链接函数中的$watch在我更改模型时似乎没有注意到,我想不出任何其他方法来执行此操作。我尝试了一个post-link函数,认为应用该指令时会调用编译函数,但这似乎也不起作用。以下是我的示例控制器:

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>
注:出于此处的目的,也进行了简化。 positionModals()调用在第一个模态被推送到数组时起作用。之后,它停止工作

我也尝试过使用链接函数,同样的结果。作用域.$watch(modals,function(){…})不起作用

有人能帮我弄清楚我做错了什么吗?

弄清楚了! 我在对家长“modalParent”执行指令。 在这种情况下,ng重复元素是模态本身“.modal”。 您可能希望该指令在模型更改时得到更新的元素上运行,因为这样每次实例化元素时都会调用链接函数,而不是坐在那里观察父元素并尝试从那里进行更新。
希望这对其他人有所帮助。

我的方法不是这样调用,而是将其写入服务中,并将该服务注入控制器中,无论您想在何处获取该函数或要通知的数据

Services.js

as.service("xyzservice",function(factoryname){
//here the code goes...
})
现在注入控制器

ac.controller("controllername",function(xyzservice){

})
ac.controller("controllername",function(servicename){

})

ac.controller("controllername",function(xyzservice){

})

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

您尝试在哪里执行scope.watch以及您的html结构是什么样子的?i、 e具有modalParent类的div的
ModalController
modalParent
?ng controller=“ModalController”之间的关系。作用域。$watch被放置在链接函数中。此处没有足够的连接。你能在一个简单的演示中复制吗?让我提供模板(之前应该做过)好的,修改了原始描述。控制器应用于modalParent时,指令应针对相同的对象运行。
ac.controller("controllername",function(xyzservice){

})
ac.controller("controllername",function(servicename){

})

ac.controller("controllername",function(xyzservice){

})