2017-01-26 2 views
2

Я рефакторинг приложения с угловым 1.5, и я пытаюсь решить проблему, не обойдя все приложение.Изменение свойства родительского контроллера из дочернего состояния в uiRouter

Моя проблема в этом; У меня есть родительский контроллер состояния со свойством. Шаблон дочернего состояния содержит компонент, который должен обновить свойство в родительском состоянии.

Мои состояния устанавливаются следующим образом:

$stateProvider 
    .state('parent', { 
    abstract: true, 
    component: 'parentComponent' 
    }) 
    .state('parent.child', { 
    url: '/child', 
    component: 'childComponent' 
    }) 

Компонент ребенок имеет шаблон, содержащий это собственный компонент, который определяет метод контроллера в качестве обратного вызова:

<grand-child on-change="$ctrl.doSomething()"></grand-child> 

Я хочу, чтобы обратный вызов измените свойство на родительском контроллере.

Я мог бы сделать что-то вроде ввода $ scope в родительском контроллере, а затем добавить свойство к объекту области видимости и использовать наследование области для изменения свойства из дочернего элемента, но я пытаюсь удалить $ scope из проекта, не добавляйте больше. Есть ли другой способ обновления родительского контроллера?

ответ

1

В таком прикован Senario,

Я бы порекомендовал вам хранить имущество в службе

(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .service('MyService', MyService); 

    MyService.$inject = []; 

    /* @ngInject */ 
    function MyService() { 



     this.myProperty = ''; // some default value if exists 
    } 
})(); 

В контроллере вашего внучатая дочернего компонента впрыснуть MyService затем

doSomething() { 

    this.MyService.myProperty = 'some new value'; 
} 

В контроллер вашего родительского компонента введите MyService, затем

$onInit() { 

    this.myProperty = this.MyService.myProperty; 
} 
+0

Спасибо, это именно то, что я закончил делать. – jhummel