Javascript 在ngRepeat中更改对象

Javascript 在ngRepeat中更改对象,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我正在通过ngRepat迭代对象数组。每个人都有一个指令。在该指令中,我试图将其分配给scope变量,该变量起初工作正常,但在更改数组时,它会被重置 app.directive('testDirective',function(){ 返回{ 限制:'E', 作用域:{obj:'='}, 模板:'(单击要应用更改的项目,单击“验证”添加新元素后,所有内容都将重置) 仅仅相应地更改属性,而不是整个对象,对我没有帮助,我实际上是在我自己的代码中重新分配不同的子类。这是有效的: app.direct

我正在通过ngRepat迭代对象数组。每个人都有一个指令。在该指令中,我试图将其分配给scope变量,该变量起初工作正常,但在更改数组时,它会被重置

app.directive('testDirective',function(){
返回{
限制:'E',
作用域:{obj:'='},
模板:'(单击要应用更改的项目,单击“验证”添加新元素后,所有内容都将重置)

仅仅相应地更改属性,而不是整个对象,对我没有帮助,我实际上是在我自己的代码中重新分配不同的子类。

这是有效的:

app.directive('testDirective',function(){
返回{
限制:'E',
作用域:{obj:'='},

模板:'.

我认为这是预期的行为。ng repeat仍然循环“对象中的obj”,数据将根据angular的周期以许多随机间隔刷新。在这里,您可以看到它在每次添加新项目时刷新数据。您没有更改“对象”数据,仅对对象数组中的项的本地引用

尝试通过ng repeat将$index传递到项本地范围

<a ng-click="doTheThing($index)">

您可以调用控制器中的方法,用新对象替换原始对象

<test-directive obj="obj" updated="replaceObject(obj, newObj)" ng-repeat="obj in objects">
</test-directive>
在指令中:

scope: { 
    obj: '=',
    updated: '&'  
},
template: '<div><a ng-click="doTheThing()">{{obj.title}}</a></div>',
link: function($scope, $element, $attrs) {
    $scope.doTheThing = function() {
        $scope.updated({newObj: { changed: true, title: 'Is changed.'}});
  };
}
作用域:{
对象:“=”,
更新:“&”
},

template:“

除了在我的指令中添加索引和列表属性之外,你知道如何让它更通用吗?除此之外,它还可以工作,谢谢!这个答案与我的答案是一样的——这是关于角度继承的一个重要基本事实。他建议你修改
$scope.objects[0]
实际上是
$scope.objects.0
,因此是“点”正如我所说的,我实际上不能只更改属性,因为我必须分配一个新的子类,否则它就像你所说的那样微不足道,是的。你能详细说明一下我有来自不同来源的轨迹,一个公共轨迹超类和LocalTrack,SomeSourceTrack等子类。该指令用于选择一个轨迹,因此它的轨迹属性可能是c在类之间进行更改(因为您可以随时更改源代码)。因此,仅更改对象上的一组字段对我来说是不行的,除非我还更改了prototype等
$scope.objects[index] = { changed: true, title: 'Is changed.'};
<test-directive obj="obj" updated="replaceObject(obj, newObj)" ng-repeat="obj in objects">
</test-directive>
$scope.replaceObject = function(object, newObject) {
    var i = $scope.objects.indexOf(object);
    $scope.objects.splice(i, 1, newObject);
}
scope: { 
    obj: '=',
    updated: '&'  
},
template: '<div><a ng-click="doTheThing()">{{obj.title}}</a></div>',
link: function($scope, $element, $attrs) {
    $scope.doTheThing = function() {
        $scope.updated({newObj: { changed: true, title: 'Is changed.'}});
  };
}