2015-06-19 2 views
0

Я контроллер в AngluarJS определяется следующим образом:доступа родительский контроллер от состояния ребенка

'use strict'; 

var app = angular.module('app'); 

app.controller('AppCtrl', ['sth', 
    function (sth) { 
     this.inverse = false; 
    } 
]); 

здесь маршруты deffinition:

$stateProvider. 
state('app', { 
    abstract: true, 
    templateUrl: 'app/views/layout.html', 
    controller: 'AppCtrl', 
    controllerAs: 'app', 
    resolve: {} 
}). 
state('app.settings', { 
    abstract: true, 
    url: '/settings', 
    template: '<ui-view/>', 
    onEnter: function() { 

    } 
}); 

Как получить доступ к обратной переменной из AppCtrl в app.settings маршрут?

+0

Если вы хотите обмениваться данными между двумя контроллерами, вам лучше всего воспользоваться сервисом/заводом. –

ответ

0

Если вы хотите обмениваться данными между двумя контроллерами, вам лучше всего воспользоваться сервисом/заводом. Ниже приведен пример того, как вы это сделаете. Я написал это бесплатно, так что могут быть синтаксические ошибки, но вы получаете идею.

app.controller('AppCtrl', ['sth', 'SharedData', 
    function (sth, SharedData) { 
     SharedData.inverse = false; 
    } 
]); 

app.factory('SharedDate', function() { 
    var data = { 
    inverse: true // or whatever default value you want to set 
    }; 

    return data; 
}) 

Теперь вы можете ввести фабрику SharedData в любой контроллер, где вы хотите использовать эти данные.

+0

Я знаю, что могу использовать сервис, но я чувствую, что это перебор для изменения только переменных. Если я буду использовать $ scope.inverse вместо this.inverse, он будет доступен из области children. Я не знаю, возможно ли сделать то же самое в моем подходе. – lucas

+0

Другой способ - установить его на rootScope, но я лично этого никогда не делаю. Я все равно поеду по заводскому маршруту. Таким образом, это будет полезно, если вы будете иметь возможность передавать больше данных в будущем. –

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