移除项目时,角度范围不会更新
Angular scope doesn't update when removing an item
我有一个简单的应用程序,我可以在其中将用户添加到列表中并删除它们。
用于添加新用户的表单绑定到$scope.newPerson
。提交表单时,我将newPerson
对象添加到$scope.people
这是一个包含person
对象的数组。
我使用 ng-repeat
指令遍历 people
数组,以打印出当前添加到范围的人员。这些行都有一个删除按钮(Jade 代码段(:
div.row(data-person, ng-repeat="person in people", ng-model="person")
button(ng-click="removePerson(person)") Remove
当我单击"删除"按钮时,我执行此函数:
$scope.removePerson = function(person) {
var index = $scope.people.indexOf(person);
if (index > -1) {
$scope.people.splice(index, 1);
person = null;
}
}
这将从表中删除该行,并将person
范围设置为 null
。巴塔朗事后展示{ This scope has no models }
。
但是,我注意到我的people
数组没有更新。当我在 Batarang 中检查它的范围时,我刚刚删除的人仍在该数组中。当我开始键入以添加新人员时,它会更新。如果我在不执行此操作的情况下将整个页面提交到我的服务器,则数组仍包含已删除的人员。
如果我把$scope.$apply()
放在person = null;
之后,我会得到预期的行为,但是它会抛出一个错误,即apply is in progress
.我还读到打电话给自己$apply()
被认为是不好的做法。(?)
我是 Angular 的新手,我似乎找不到很多关于解决这个问题的信息。当我删除一个人时,如何让它更新我的阵列?谢谢。
我做了以下操作来解决这个问题:
ng-repeat
块上不再有ng-model
:
div.row(data-person, ng-repeat="person in people")
重构了removePerson()
的ng-click
事件:
<button ng-click="removePerson($index)">
Remove
</button>
并将removePerson()
代码更改为:
$scope.removePerson = function(index) {
$scope.people.splice(index, 1);
};
与我以前的代码相比,不确定这是否真的解决了任何问题,因为我注意到这也是一个 Batarang 问题。当我简单地{{ people }}
登录到我的 HTML 或 console.log($scope.people)
时,我看到people
数组更新。但是,在巴塔朗中,数组不会更新。
经验教训:有时,自己记录内容比依赖工具更好;)
切片方法不更新数组,但返回 New a
- 如何通过数组更新角度子范围
- ngDialog-弹出窗口未更新范围变量
- 如何在范围值更改时使用 angularJs 更新 UI
- 正在更新起始日期角度日期范围选择器中的日期选择
- AngularJS范围没有更新
- Angular JS-文本框未在独立范围内更新
- 可以't在quizz页面范围问题上用最终分数更新变量
- 无法使用编程加载的属性更新范围滑块.js
- 角度文件上传更新范围在完成项上
- Angularjs 更新 setTimeout 中的范围变量不起作用
- 如何不断更新 d3 图中 x 轴的范围
- 离子范围值未更新 在$state之间导航
- AngularJS摘要周期偶尔无法更新范围
- Angular:从工厂更新范围不起作用
- 根据输入范围更新显示的文本量
- 根据输入范围更新显示的文本量
- 角度.js在范围更新后运行 ng-show 函数
- angular.js指令双向绑定范围更新
- 角度指令和范围更新让人疯狂
- 角,Apache - $范围更新,但需要点击某处显示在界面上