2
在我的角度應用程序,我已經創建了一個navbar
自定義指令,該控制器發生在$stateParams
訪問一個名爲lang
變量,像這樣:
.config(function($stateProvider, $urlRouterProvider, LANG) {
$urlRouterProvider
.otherwise('/' + LANG['EN'].shortName);
$stateProvider
.state('proverb-list', {
url: '/:lang',
templateUrl: 'components/proverb-list/proverb-list.html',
controller: 'ProverbListCtrl as vm'
})
.state('proverb-single', {
url: '/:lang/:proverbId',
templateUrl: 'components/proverb-single/proverb-single.html',
controller: 'ProverbCtrl as vm'
});
});
當我訪問proverb-list
狀態時,名爲ProverbListCtrl
的控制器確實看到$stateParams.lang
,但我的導航欄指令不能。當我console.log($stateParams)
所有我得到的是一個空的對象。
這NavBar是超出了我的ui-view
:
<navbar proverbial-navbar></navbar>
<div ui-view></div>
<footer proverbial-footer></footer>
是什麼問題?我如何訪問我的指令中的實際$ stateParams?
編輯:指令下面的代碼,如問:
(function() {
'use strict';
angular
.module('proverbial')
.directive('proverbialNavbar', directive);
function directive() {
var directive = {
restrict: 'EA',
templateUrl: 'components/shared/navbar/navbar.html',
scope: {
},
link: linkFunc,
controller: Controller,
controllerAs: 'vm',
bindToController: true
};
return directive;
function linkFunc(scope, el, attr, ctrl) {
}
}
Controller.$inject = ['LANG', 'ProverbFactory', '$stateParams'];
function Controller(LANG, ProverbFactory, $stateParams) {
var vm = this;
vm.languages = LANG;
console.log($stateParams);
vm.currentLang = LANG[$stateParams.lang.toUpperCase()];
activate();
function activate() {
vm.alphabet = ProverbFactory.getAlphabet();
}
}
})();
請在指令中用'='符號將stateparams作爲值傳遞。您應該能夠以這種方式訪問指令中的示波器模型。因此,可能希望在將$ stateParams傳遞給指令之前將其分配給模型。請記住,在這些情況下,即使您有單獨的指示範圍,您也可能需要使用子女互動範圍/影子dom。因此,爲所有這些創建一個超級控制器。 Ui-router允許你指定多個視圖可能你可以使用那個 – Gary
是的,導航欄在UI視圖之外可能是問題。想想看。在你進入狀態之前,導航欄會被實例化一次。所以當導航欄代碼運行時,它還沒有進入狀態。顯示您的指令代碼以確認。 –