AngularJS UI Router Именованные представления - иметь представление контроллера знаю

0

Мы используем ui-router в AngularJS и используем именованные виды. У нас есть одно состояние с тремя именованными представлениями, а контроллер/шаблон, который используется для каждого именованного представления, определяется переданными параметрами. Когда контроллер загружается в одно из названных представлений, нам нужен контроллер, чтобы иметь возможность узнать, какие именованный вид, в который он загружен. Есть ли способ сделать это?

Вот код, который настраивает состояние и названные представления.

.state('state1', {
    url: '/state1',
    templateUrl: 'views/state1.html',
    controller: 'state1Controller'
})
.state('state1.nested', {
    url: "/:post/:current/:pre",
    views: {
        "view1": {
            templateUrl: function ($stateParams) { return "views/" + $stateParams.post + ".html" },
            controllerProvider: function ($stateParams) {
                var ctrlName = $stateParams.post + "Controller";
                return ctrlName;
            }
        },
        "view2": {
            templateUrl: function ($stateParams) { return "views/" + $stateParams.current + ".html" },
            controllerProvider: function ($stateParams) {
                var ctrlName = $stateParams.current + "Controller";
                return ctrlName;
            }
        },
        "view3": {
            templateUrl: function ($stateParams) { return "views/" + $stateParams.pre + ".html" },
            controllerProvider: function ($stateParams) {
                var ctrlName = $stateParams.pre + "Controller";
                return ctrlName;
            }
        }
    }
})

Есть ли способ для контроллера узнать, какой именованный вид он был загружен? Или есть способ передать разные значения параметров до каждого вложенного представления, чтобы он мог быть идентифицирован параметром?

Теги:
angular-ui-router

1 ответ

1
Лучший ответ

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

View2Template.html

<div my-directive>HelloWorld</div>

MyDirectives.js

app.directive('myDirective', function () {
    return {
        restrict: 'A',            
        link: function (scope, element) {
            var parent = element.parent();
            var view = parent[0].attributes["ui-view"].value;
            scope.init(view);
        }
    }
});  

Ещё вопросы

Сообщество Overcoder
Наверх
Меню