我在解决这个问题上遇到了困难。我想要实现的是更新传递给不同控制器中的函数的迭代对象。
这是我的控制器 -
angular.module('eatmapp.controllers', ['eatmapp.services'])
.controller('AppCtrl', function($scope) {
$scope.intoCart = function(item) {
if(item.type == 'variations'){
item = newItemObj;
}
}
})
.controller('BrowseCtrl', function($scope, dataService, $localstorage) {
dataService.getItems().then(function(returnData) {
$scope.items = returnData.products;
})
});
以下是我的观点 -
<div ng-controller="BrowseCtrl">
<div class="list card product" ng-repeat="item in items" ng-click="intoCart(item)">
<div class="item item-text-wrap">
<span class="ifs-productcat" ng-repeat="category in item.categories">{{category}}<span ng-if="$index != item.categories.length - 1">,</span></span><br>
<h3>{{item.title}}</h3>
<h3>Rs.{{item.price}}</h3>
</div>
</div>
</div>
在使用另一个控制器(AppCtrl)中的方法(intoCart)进行一些条件检查后,我需要在模板视图中实现的迭代(ng-repeat)中使用newItemObject更新项目对象。我是javascript编程的新手,我正在寻求帮助。
答案 0 :(得分:1)
我遇到的问题是无法访问&#39; ng-repeat&#39;控制器中的子范围。 我使用&#39; this.item&#39;解决了这个问题。在控制器中而不是传递整个对象或索引。
HTML -
<div class="list card product" ng-repeat="item in items" ng-click="intoCart()"></div>
控制器 -
angular.module('eatmapp.controllers', ['eatmapp.services'])
.controller('AppCtrl', function($scope) {
$scope.intoCart = function() {
item = this.item; // current (ng-click) child scope of ng-repeat
if(item.type == 'variations'){
item = newItemObj;
}
}
})
现在,每当我对&#39; item&#39;进行更改时对象,它会自动更新视图中的范围(ng-repeat)。
答案 1 :(得分:0)
我喜欢处理这个问题的方法是使用服务作为setter和getter。问题是你必须将服务包含在每个需要访问它的控制器中,但是如果你没有太多,它就没什么大不了的。所以像这样:
.service('userFirstName', function() {
var userFirstNameProp;
return {
getter: function() {
return userFirstNameProp;
},
setter: function(value) {
userFirstNameProp = value;
}
};
})
然后您可以根据需要调用userFirstName.getter()或userFirstName.setter(&#34; John&#34;)。