首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该把AngularJS scope $watchers放在哪里?

我应该把AngularJS scope $watchers放在哪里?
EN

Stack Overflow用户
提问于 2013-04-17 14:31:44
回答 1查看 1.2K关注 0票数 1

我正在尝试对AngularJS作用域进行更改以触发模型中的操作。为此,我在项目控制器中使用$scope.$watch(),并将这些控制器插入到指令中。我遇到的问题是,当一个项目在一个页面上出现不止一次时,我会得到同一条数据的多个观察者。

例如:

代码语言:javascript
复制
angular.module("MyApp", [])
.factory('ItemsModel', function() {
    var item1 = { triggers: 0, catches: 0 };
    var item2 = { triggers: 0, catches: 0 };

    return {
        getItems: function() { 
            return [item1, item2, item1];
        }
    };
})
.controller('AppCtrl', function($scope, ItemsModel) {
    $scope.items = ItemsModel.getItems();    
})
.controller('ItemCtrl', function($scope) {
    $scope.trigger = function() {
        $scope.item.triggers++;
    };    
    $scope.$watch('item.triggers', function(newValue, oldValue) {
        if(newValue != oldValue)
            $scope.item.catches++;
    });
})
.directive('item', function() {
    return {
        scope: {
            item: "="
        },
        controller: 'ItemCtrl'
    };
});

在这里,item1items数组中出现了两次,所以我最终得到了两个控制器来监视同一段数据。如果triggers是对属性的更改,而catches被保存回服务器,那么我将把每个更改保存到item1两次。如果一个项目出现三次,它将节省三次。

我觉得变更监听器应该放在模型中,但是模型不能访问作用域。迭代每一项并在AppCtrl中添加行为对我来说没有多大意义。那么,观察者应该去哪里呢?

我还把这个放在这里:http://jsfiddle.net/nicholasstephan/p56MT/3/

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-05-15 11:56:46

我没有像这里那样使用指令中指定的控制器,但另一种方法是在item上的指令中设置监视。这样,对于指令中的项的更改,手表只会被触发一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16053101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档