angularjs-ngRepeat与ngInit-ngRepeat不';刷新渲染值

angularjs-ngRepeat与ngInit-ngRepeat不';刷新渲染值,angularjs,Angularjs,我有使用ngRepeater显示的数组,但有了这个指令,我使用了ngInit指令,它执行的函数应该返回要显示的对象。一切都很完美,但当我添加了“新建”按钮,向数组添加新值时,函数“SetPreview”只执行一次,我认为函数应该根据数组值的大小来执行。我该怎么做 用户界面: 编辑: ->现在,手机的集合为空,当您单击“添加”按钮时,会添加新项目并将其设置为可编辑(您可以更改文本字段中的值),当执行ngRender时,SetPreview函数会返回可编辑对象(其工作方式类似于预览)。现在,再次尝

我有使用ngRepeater显示的数组,但有了这个指令,我使用了ngInit指令,它执行的函数应该返回要显示的对象。一切都很完美,但当我添加了“新建”按钮,向数组添加新值时,函数“SetPreview”只执行一次,我认为函数应该根据数组值的大小来执行。我该怎么做

用户界面:

编辑:

->现在,手机的集合为空,当您单击“添加”按钮时,会添加新项目并将其设置为可编辑(您可以更改文本字段中的值),当执行ngRender时,SetPreview函数会返回可编辑对象(其工作方式类似于预览)。现在,再次尝试单击“添加”按钮,您可以看到第一项的可编辑值仍然显示给用户,但我想刷新整个ng中继器。

您正在运行角度性能功能

基本上,我们可以看到数组中的元素(例如“A”)是同一个对象引用,因此它不再调用ng init。这是有效的。即使将旧列表连接到新列表中,Angular也会看到它是同一个引用

相反,如果您创建的新对象与旧对象具有相同的值,则该对象具有不同的引用并重新初始化它: 这是一个不好的例子,它符合您的要求:


我不推荐在fiddle中采用的方法,但您应该找到一种不同于ng init的方法来触发代码。

我发现您可以在隐藏块中用角度表达式
{}
替换
ng init

<body ng-app>

<ul ng-controller="PhoneListCtrl">
    <button ng-click="add()">Add</button>
    <li ng-repeat="phone in phones">
      <span style="display: none">{{displayedQuestion=SetPreview(phone)}}</span>
      {{displayedQuestion.name}}
      <p>{{displayedQuestion.snippet}}</p>
    </li>
  </ul>
</body>

    添加
  • {{displayedQuestion=SetPreview(电话)} {{displayedQuestion.name} {{displayedQuestion.snippet}


如果元素中有ngInit,子代中有ngRepeat,ngInit将只运行一次

要解决这个问题,请使用ngInit向元素添加一个ngRepeat,该元素包含一个重复一次并依赖于同一数组(和其他依赖项)的表达式

例如:

ng-repeat="_ in [ products ]" ng-init="total = 0"

按“添加”按钮时,SetPreview执行了多少次?最初应为4次,但仅执行一次。查看控制台窗口;)每次
add
press都会在控制台中产生一个新条目,但我想刷新整个ng repeater,那么控制台中的条目数量应该等于数组项的数量。我的函数SetPrieview可以返回编辑过的对象(本例中未实现)并对其进行渲染,但当用户按下“添加”按钮时,他将退出编辑并显示原始值,但当前只添加了新记录,并且仍显示编辑过的值。我想我必须重复一遍。如果你愿意,我可以用编辑工具创建整个示例是的,如果你能分享整个示例会更好我编辑过的问题,我希望现在它更容易理解
$scope.add = function(item) {
    var newItems = [];
    angular.forEach($scope.items, function(obj){
        this.push({val:obj.val});
    },newItems)

    newItems.push({val:item})
    $scope.items = newItems;
};
<body ng-app>

<ul ng-controller="PhoneListCtrl">
    <button ng-click="add()">Add</button>
    <li ng-repeat="phone in phones">
      <span style="display: none">{{displayedQuestion=SetPreview(phone)}}</span>
      {{displayedQuestion.name}}
      <p>{{displayedQuestion.snippet}}</p>
    </li>
  </ul>
</body>
ng-repeat="_ in [ products ]" ng-init="total = 0"