AngularJs - 绑定在paramter中传递给来自不同控制器的对象

时间:2015-09-02 19:39:32

标签: javascript angularjs model-view-controller ionic-framework ionic

我在解决这个问题上遇到了困难。我想要实现的是更新传递给不同控制器中的函数的迭代对象。

这是我的控制器 -

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编程的新手,我正在寻求帮助。

2 个答案:

答案 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;)。