Передача параметров в шаблон маршрутизатора Angular UI

Мой маршрутизатор angular ui меняет состояния/представления как:

    $stateProvider
        .state({
            name: 'home',
            url: '/',
            template: '<home-view></home-view>',
        })

Есть ли способ передать связанные параметры в ‹ home-view> в маршрутизаторе пользовательского интерфейса?

E.g.

<home-view my-data="dataObject">

or

<home-view my-data="myService.getMyData()">

Контроллер для my-view находится в собственном файле с фактическим шаблоном и директивой.


person Janne    schedule 27.11.2016    source источник
comment
Почему бы не передать его через controller представления? Вот для чего это :)   -  person George Kagan    schedule 27.11.2016
comment
Что ж, мне удалось заставить его работать с функцией контроллера и $scope.$parent.myData. Однако действительно ли это так, что его нельзя передать через шаблон, например, с привязкой директивы и данных?   -  person Janne    schedule 27.11.2016


Ответы (2)


В итоге с этим вопросом помог мой коллега. Решение использует разрешение для получения данных, а затем передает их как переменную области маршрутизатора в шаблон. Важным открытием стало то, что контроллер, определенный в маршрутизаторе, имеет свою собственную область, а не область «домашнего вида». В моем домашнем контроллере контроллера маршрутизатора можно было получить доступ через $scope.parent.

.state({
    name: 'home',
    url: '/',
    resolve: {
        cData: (MyService) => {
            return MyService.getMyData()
        }
    },
    controller: function (cData) {
        this.data = cData;
    },
    controllerAs: 'ctrl',
    template: '<home-view my-data="ctrl.data"></home-view>'
})
person Janne    schedule 28.11.2016

Вы можете использовать преобразователь

$stateProvider
    .state({
        name: 'home',
        controller : "MyController"
        url: '/',
        resolve: {
            obj: function() {
                return {prop:"hello!"}
            }
        }
        template: '<home-view></home-view>',
})

// MyController
angular.module('app').controller('MyController', function(obj) {
    console.log(obj.prop); // hello!
});
person Merlin    schedule 27.11.2016