這可能是有點主觀的回答,但我親手做的基於角應用組件是創建一個將封裝的所有組件其他組件。
我覺得分享登錄信息特別有用,無需在每個組件中調用服務。 (並無需存儲rootScope內的用戶數據,瀏覽器存儲或餅乾
比如你做一個組成部分家長像這樣:
var master = {
bindings: {},
controller: masterController,
templateUrl: 'components/master/master.template.html'
};
function masterController(loginService) {
var vm = this;
this.loggedUser = {};
loginService.getUser().then(function(data) {
vm.loggedUser = data;
});
this.getUser = function() {
return this.loggedUser;
};
}
angular
.module('app')
.component('master', master)
.controller('masterController', masterController);
主控部件將採取路由照顧
的index.html:
<master></master>
master.template.html:
<your common header>
<data ui-view></data>
<your common footer>
這樣,裏面<ui-view>
注入每個組件將能夠「繼承」主控部件,像這樣:
var login = {
bindings: {},
require: {
master: '^^master'
},
controller: loginController,
templateUrl: 'components/login/login.template.html'
};
,並在組件控制器
var vm=this;
this.user = {};
this.$onInit = function() {
vm.user = vm.master.getUser();
};
你需要用一生循環掛鉤$onInit
以確保所有控制器和綁定已註冊。
最後一個絕招組件之間的導航是有一個路線像這樣(假設你使用的UI路由器的穩定版本):
.state('home',
{
url : '/home',
template : '<home></home>'
})
這將有效路徑和負載內<ui-view>
您的組件ui-router的新版本包括組件路由。
來源
2016-07-11 12:52:02
gyc
我會創建一個文件夾'services'並且把東西放在那裏,你想從不同的控制器訪問 –
你想要共享代碼或者有共同的佈局(頁眉/頁腳)嗎? – gyc
我想要有一個共同的佈局,但我也需要能夠控制這個佈局的DOM,所以我假設我需要使用指令? @gyc – Dillon