在自我更新时以ng重复更新模型
Update model in ng-repeat when is self-updated
我的范围内有一个数组,我正在使用 html 模板中的输入迭代每个元素:
控制器:
app.controller("otherArticleCtrl", ["$scope", "$http", function($scope, $http) {
$scope.articles = [{ url: 'index.php', title: "First"}, { url: 'index.php', title: "Second"}];
}]);
模板:
<div ng-repeat="(key, article) in articles track by $index">
<h1>{{ article.title }}</h1>
<input type="text" ng-model="article.url"/>
</div>
当用户修改输入中的 url、进行 AJAX 获取调用并更新文章标题时,我需要。
我做了一个遍历数组的监视函数:
for(var i=0; i < $scope.articles.length; i++) {
$scope.$watch('articles['+i+'].url', function(new, old){
if(new != old){
$http({
method: 'GET',
url: new
}).then(function successCallback(response) {
$scope.articles[i].title = response.title;
});
}
}, true);
}
但是$scope.articles[i]是未定义的,我不知道如何获取已更改模型或元素的引用。
有什么想法吗?感谢您的帮助。
不应在任何循环中使用$watch
。在这种情况下,您可以使用 ng-change
而不是 $watch
.并在ng-change
函数中发送index number
。像ng-change="changeUrl($index)"
.和功能如波纹管所示。
可以尝试:
在 html 中:
<div ng-repeat="(key, article) in articles track by $index">
<h1>{{ article.title }}</h1>
<input type="text" ng-model="article.url" ng-change="changeUrl($index)"/>
</div>{{index}}
在控制器中:
$scope.articles = [{ url: 'index.php', title: "First"}, { url: 'index.php', title: "Second"}];
$scope.changeUrl = function(index){
$http({
method: 'GET',
url: $scope.articles[index].url
}).then(function successCallback(response) {
$scope.articles[index].title = response.title;
});
};
您可以使用$http.get
$http.get($scope.articles[index].url)
.then(function(response) {
$scope.articles[index].title = response.title;
});
我建议改用ngChange。
你可以做这样的事情:
<input type="text" ng-model="article.url" ng-change="somethingChanged()"/>
并在控制器中添加该功能。如果你需要知道更改的元素的索引,您可以使用 ng-repeat 中的$index来知道更改的数据在哪里:
<input type="text" ng-model="article.url" ng-change="somethingChanged($index)"/>
$scope.somethingChanged = function(index) {
$scope.articles[index]; <--------- Here is the element that changed
}
祝您编码愉快!
相关文章:
- 如何为动态创建的文本区域中输入的值更新ng模型
- 在数据更改时更新ng重复
- 使用输入更新 ng 模型数据
- Angularjs在更改ng之前需要更新ng模型
- 通过使用ng if更新ng repeat加载程序
- 如何在Angularjs中使用ng选项时更新ng模型
- 在angularjs复选框输入中更新ng模型或执行ng更改之前需要确认
- AngularJS没有't在Django管理日期小部件上的jQuery事件后更新ng模型
- 如果值为true,AngularJS将更新ng模型
- 如何只更新ng repeat中的部分元素
- 角度 1.5 不更新 ng-repeat
- 如何更新 ng 模型值
- Angular 在触发更改时不更新 Ng 类
- 在角度材料对话框数据输入/推送后更新ng-repeat
- 添加重复键对象时如何更新 ng-repeat 列表中的元素
- 更新 ng 重复中的嵌套对象
- 从另一个 Angular 控制器更新 ng-repeat
- 如何使用来自外部源的数据更新 ng 模型
- 如何使用另一个 ng 选项选定值动态更新 ng 选项值
- AngularJS更新ng-model的值以设置默认值