Мы используем 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;
}
}
}
})
Есть ли способ для контроллера узнать, какой именованный вид он был загружен? Или есть способ передать разные значения параметров до каждого вложенного представления, чтобы он мог быть идентифицирован параметром?
Это может быть не самый угловатый способ сделать что-то, но я создал директиву, чтобы быть наверху на верхнем уровне шаблона, который получит имя, а затем вызовет метод на контроллере области с этим именем.
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);
}
}
});