1

У меня возникли трудности в решении этого вопроса. То, что я пытаюсь достичь, - это обновить итерированные объекты, которые передаются функции в другом контроллере.AngularJs - привязка, переданная в параметре к объекту с другого контроллера

Вот мои контроллеры -

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> 

мне нужно обновить объект элемента с newItemObject в итерации (нг-повтор) implemeted в виде шаблона после выполнения некоторых проверка состояния с помощью метода (inCart) в другом контроллере (AppCtrl). Я довольно новичок в программировании на JavaScript, и я ищу какую-то помощь.

+0

Сделать эту функцию частью некоторой службы, тогда вы можете ввести эту услугу в любой контроллер и использовать эту функцию. –

+2

В чем вопрос? – Rayon

+1

Ионный не имеет ничего общего с этим. – Vidul

ответ

1

Проблема, с которой я столкнулся, не смогла получить доступ к детской области «ng-repeat» в контроллере. Я решил это использовать 'this.item' в контроллере, а не передавать весь объект или индекс.

HTML -

<div class="list card product" ng-repeat="item in items" ng-click="intoCart()"></div> 

Controller -

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; 
     } 
    } 
}) 

Теперь, когда я внес изменения в пункт '' объект, он автоматически обновляет область в целях (нг-повтора).

+0

Я собирался предложить запрос родительского объекта, но звучит так, будто у вас есть работа! –

0

Как-то мне нравится обрабатывать это, используя сервисы как сеттеры и геттеры. Проблема в том, что вам нужно включить службу с каждым контроллером, которому необходимо получить к нему доступ, но если у вас их слишком много, это не имеет большого значения. Так что-то вроде этого:

.service('userFirstName', function() { 
     var userFirstNameProp; 
     return { 
     getter: function() { 
      return userFirstNameProp; 
     }, 
     setter: function(value) { 
      userFirstNameProp = value; 
     } 
     }; 
    }) 

Тогда вы можете вызвать userFirstName.getter() или userFirstName.setter ("John") в зависимости от обстоятельств.

+0

Я пробовал это. Я даже пытался использовать функцию внутри одного контроллера. Поправьте меня, если я ошибаюсь, не меняются угловые изменения часов в каждой итерации? Я хочу обновить каждый элемент в ng-repeat, если выполняется определенное условие. – awd2923

+0

Ох ... вы хотите, чтобы он обновил/перезапустил ng-repeat, если что-то изменилось на другом контроллере? Чтобы быть ясным, вы обновляете значение в области контроллера, а ng-repeat, похоже, не работает снова? –

+0

Да. Я не смог получить доступ к дочерней области ng-repeat в controllee, даже если я передаю весь объект объекта в качестве параметра. В любом случае я решил использовать «this.item» в контроллере. – awd2923

Смежные вопросы