Как передать данные из частичного в основной вид в angular?

У меня есть основной вид, который включает в себя частичное следующим образом:

 </div>
  <ng-include src="'/public/xyz.html'"></ng-include>
 </div>
 <div> 
   <span>{{abcd.Name}}</span>
 </div>

У партиала есть переменная, которая заполняется при щелчке элемента, и мне нужно передать эти данные из партиала в родительский. Переменная заполняется в частичном контроллере как:

$scope.$parent.abcd = {"Name":"xyz"}

Но когда я пытаюсь получить к нему доступ на главном экране, его нет.

Как получить к нему доступ в родительском?


person Infant Dev    schedule 15.05.2014    source источник
comment
Пользовательский pub/sub с $broadcast и $on для передачи таких коротких сообщений, особенно когда Name:zyx не является свойством родительской области, поэтому должно быть назначено ему   -  person Ali Habibzadeh    schedule 15.05.2014
comment
они оба находятся в одном контроллере ??   -  person chandu    schedule 15.05.2014
comment
Вы можете использовать сервисы (созданные фабрикой), которые создали общий объект.   -  person jcubic    schedule 15.05.2014
comment
@chandu нет, оба представления имеют разные контроллеры.   -  person Infant Dev    schedule 15.05.2014
comment
@jcubic общий объект сначала не определен в основном представлении, а затем заполняется в частичном.   -  person Infant Dev    schedule 15.05.2014
comment
@ребенокДев. оба являются унаследованными контроллерами или разными контроллерами   -  person chandu    schedule 15.05.2014
comment
Чтобы использовать общие объекты между контроллерами, которые вы используете, вы можете попробовать использовать их.   -  person jcubic    schedule 15.05.2014
comment
@jcubic, разве это не отношения родитель-ребенок? Нельзя ли передать через $parent, нужно ли использовать сервисы?   -  person Infant Dev    schedule 15.05.2014
comment
Не знаю, может быть, это $parent.$parent, если у вас есть контроллер внутри партиала. Проверьте внутри бэтаранга, как выглядит ваша модель.   -  person jcubic    schedule 15.05.2014
comment
Если это разные контроллеры, вам придется использовать services или $rootScope   -  person Riron    schedule 15.05.2014
comment
@jcubic $parent.$parent сработало, потому что ng-include создал собственную дочернюю область. Вы можете исправить это как ответ, чтобы я мог принять его.   -  person Infant Dev    schedule 15.05.2014


Ответы (1)


Одним из решений проблемы является то, что мы можем передать значения от дочернего элемента родительскому, используя службу $emit в AngularJs, как указано ниже.

Частями:

$scope.abcd = {"Name":"xyz"};//Объект, который нужно указать родительской области

$scope.$emit("setabcd", [$scope.abcd,....]);

где "setabcd"=имя эмитента. Пользовательское имя. Мы можем использовать любое уникальное имя. ... = объекты или переменные, о которых необходимо уведомить родительскую область.

В контроллере:

$scope.$on("setabcd",функция(событие,аргументы){$scope.abcd=args[0]});

где "setabcd" = имя эмиттера. Имя должно быть таким же, как указано в партиалах. args=массив элементов, отправленных из партиалов.

person NP Compete    schedule 17.05.2014