将 AngularJS 指令绑定到数组的映射

2024-02-25

我有一个接受对象数组的指令。在标记中声明指令时,作用域具有一个对象数组,其中包含指令所需的对象。所以我需要在数组上应用映射函数。执行此操作的正确方法是什么,以便对原始数组进行的更新反映在指令内?

这是一个采用幼稚方法的 Plunker(令我惊讶的是,除了大量 $digest 错误之外,它大部分“工作”):http://plnkr.co/edit/GUCZ3c http://plnkr.co/edit/GUCZ3c


您应该避免从 Angular 表达式调用函数,除非该函数执行一些非常轻量级的工作(例如快速计算)。这question https://stackoverflow.com/questions/17497630/is-it-very-bad-to-call-a-function-that-locally-computes-a-value-from-an-angularj有关于此事的更多细节。

在您的情况下,您应该缓存名称列表并将其绑定到指令。这是一个例子:

app.controller('MainCtrl', function($scope) {  
    $scope.people = [
        { name: 'Alice'}, 
        { name: 'Bob' },
        { name: 'Chuck' }
    ];

    $scope.addName = function(name) {
        $scope.people.push({name: name});
    };

    $scope.$watch(function() { return $scope.people.length; }, function() {
        $scope.names = $scope.people.map(function(p) { return p.name; });
    });
});

您的指令代码保持不变。这是一个fork http://plnkr.co/edit/I007Gp?p=preview你的笨蛋。

Update:我更改了代码,因此它使用$watch按照@KrisBraun 的建议自动更新名单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 AngularJS 指令绑定到数组的映射 的相关文章

随机推荐