在我們的總體佈局中,我們有一個側邊欄,其中包含一些用戶詳細信息,如姓名和縮略圖。但也有一些不同的東西。Angularjs:在用戶登錄時用不同模板重繪指令
我們的想法是在側邊欄加載一個指令,其中有2個模板,登錄時爲1,註銷時爲1。
顯示並不顯示用戶詳細信息。
但是,我們有一個叫邊欄指令與2的工作,
App.directive( '邊欄',[ 'UserService', '$編譯',功能(用戶,$編譯){
var getTemplate = function() {
console.warn(User.isLogged);
var templateUrl = "#sidebar" + ((User.isLogged) ? '_loggedin' : '') + "_template";
console.log('requesting template: [%s]', templateUrl);
return $(templateUrl).html();
};
return {
restrict: 'A',
link: function link(scope, element, attrs) {
var tmpl = getTemplate();
element.html(tmpl);
element.replaceWith($compile(element.html())(scope));
},
template: getTemplate()
};
}]);
,我們在服務
App.factory('UserService', [function userService() {
var User = {
isLogged: false,
username: ''
};
return User;
}]);
登錄表單加載我們的用戶細節接受這個UserService
的依賴,並設置它的isLogged
到true
,但我怎麼可以讓指令重繪側邊欄,當isLogged
被更改?
我們是這樣做的嗎?
這看起來很好,另一個選項可能是ng-include,其中templateURL被更改。 – shaunhusain
我試過你的解決方案,但是我不相信結果,問題是,登錄版本,例如有一個用戶頭像,如果我有'src屬性'src =「/ images/users/{{user.avatar}}「'不要緊,如果節目顯示它,它會得到渲染,這意味着當user.avatar屬性未定義時它將拋出404 任何想法如何解決這樣的事情? – Sander
你應該檢查出ngSrc:http://code.angularjs.org/1.1.5/docs/api/ng.directive:ngSrc :) 應該照顧空值,並將正確解析指令。 –