大佬教程收集整理的这篇文章主要介绍了AngularJS – 如何强制范围更新(对数组项的承诺),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
function AppCtrl($scope,$http,$LOCATIOn,$dataservicE) { $scope.projects = $dataservice.data.projects; }
这从我的$dataservice服务正确加载$scope.projects承诺.
app.service('$dataservice',function($q,$rootScopE) { var dataservice = this; //Provides access 'this' inside functions below var projectsDeferred = $q.defer(); $http.get('/api').success(function(data,status,headers,config) { projectsDeferred.resolve(data.projects); }).error(function(err) { projectsDeferred.reject(err); }); this.data = {projects: projectsDeferred.promisE}; //updatE FUNCTION function updateObjecTinArray(array,object,newData) { for(i in array) { if(arraY[i] == object) { if(newData != undefined) { arraY[i] = newData; } else { return arraY[i]; } } } return undefined; } this.updateProject = function(project,updateData) { $http.put('/api/projects/' + project._id,updateData) .success(function(data,config) { updateObjecTinArray(dataservice.data.projects.$$v,project,data); }).error(function(data,config) {}); }; });
我创建了另一个看起来像这样的控制器,它根据当前URL从项目数组中选择一个项目:
function ProjectCtrl($scope,$routE) { //GetTing the current project from the array of projects $scope.project = $scope.projects.then(function(projects) { for(i in projects) { if(projects[i]._id == $route.current.params.projectId) { return projects[i]; } } }); }
当我尝试运行我的updateObjecTinArray()函数时(我的$http.put()请求成功),AppCtrl中的$scope.projects正确更新(项目数组),但ProjectCtrl中的$scope.project是没有更新.我可以在updateObjecTinArray()函数中记录array [i],它会完全记录我的期望,我可以在AppCtrl中记录$scope.projects,它会相应更新,但是当我尝试在我的日志中记录$scope.project ProjectCtrl控制器,它没有相应更新.
我认为原因是因为我在更新updateObjecTinArray()中的array [i]对象后不得不调用$rootScope.$apply()或$rootScope.$digest(),但是,我得到的错误是$digest已经是进行中.
我需要做些什么才能确保我的$scope.project项在我的ProjectCtrl中更新?我是否需要为此解决新的承诺?
最好的解决方案是将array [i] = newData更改为angular.extend(array [i],newData).这样,你只需更改array [i]的所有属性,并且当$scope.project指向内存中的同一对象时,它将被更新.
无论如何,我也相信你可能想要改变if(array [i] == object){to if(array [i] ._ id === object._id){和你的等式比较(==)到严格的相等比较(===).这样可以更好地适合您的原因,因为新创建的对象与旧对象不同.
以上是大佬教程为你收集整理的AngularJS – 如何强制范围更新(对数组项的承诺)全部内容,希望文章能够帮你解决AngularJS – 如何强制范围更新(对数组项的承诺)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。