从外部更改ng-repeat范围内的模型

时间:2014-03-28 08:23:14

标签: javascript angularjs

我在控制器内部有一个转发器,转发器中的每个项目都有自己的状态:

<div ng-controller="...">
  <div ng-repeat"...">{{status}}</div>
</div>

现在,假设我想改变这种状态,如果我在转发器中使用status = 'foo'它就像一个魅力,重复中的每个项目都可以有自己的状态。但是,我想从控制器更改此状态,因为我想使用一些ajax调用和这样的魔术。我搜索了所有的网页,并问我的好朋友谷歌几个问题,但我找不到任何有关如何进入重复项目范围的信息。

This fiddle模拟我的问题,如果你单击其中一个按钮,它会将整个范围的状态更改为clicked,而我想要实现的只是获取旁边的圆圈变成蓝色的按钮。 (我知道我可以在列表中添加一个值,但我有理由不这样做。)

2 个答案:

答案 0 :(得分:4)

这是原型继承的经典案例。您可以使用this.status设置当前范围内的状态。

在这里看我的小提琴

http://jsfiddle.net/BdcuS/

调用该方法时,使用此set调用它到当前范围。这是ng-repeat

的范围

直到我链接到这个谈论这个的维基页面https://github.com/angular/angular.js/wiki/Understanding-Scopes,我的回答才会完整。

答案 1 :(得分:3)

每个项目都需要拥有自己的唯一状态属性,而不是一个连接到控制器的属性,例如:

function fooCtrl($scope, $timeout){
    // list is now an array of objects, each of which has an empty status property
    $scope.list = [{status: null}, {status: null}, {status: null}];

    $scope.setStatus = function(item, status){
        // Only update the status of that one property
        item.status = status;

        //Simulate an ajax request
        $timeout(function(){
            item.status = null;
        }, 1000);
    }
}

查看:

<div ng-repeat="item in list">
    <div class="circle {{item.status}}">

    </div>
    <button ng-click="setStatus(item, 'clicked')">click me</button>
</div>

Update jsFiddle