对于 AngularJS 应用程序,我应该将要在 components/controllers 中使用的代码放在哪里?
Where should I place code to be used across components/controllers for an AngularJS app?
是否应该与应用模块相关联?它应该是一个组件还是只是一个控制器?基本上我想要实现的是所有页面的通用布局,我可以在其中放置或删除其他组件。
我的应用程序结构大致如下:
-/bower_components
-/core
-/login
--login.component.js
--login.module.js
--login.template.html
-/register
--register.component.js
--register.module.js
--register.template.html
-app.css
-app.module.js
-index.html
回答这个问题可能有点主观,但我个人在基于组件的 Angular 应用程序中所做的是创建一个封装所有其他组件的组件。
我发现无需在每个组件中调用服务即可共享登录信息特别有用。 (并且无需将用户数据存储在 rootScope、浏览器存储或 cookie 中。
例如,您可以像这样创建一个组件父级:
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>
中的每个组件都能够 'inherit' 像这样的主组件:
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-router 稳定版本):
.state('home',
{
url : '/home',
template : '<home></home>'
})
这将有效地在 <ui-view>
中路由和加载您的组件
新版本的 ui-router 包含组件路由。
是否应该与应用模块相关联?它应该是一个组件还是只是一个控制器?基本上我想要实现的是所有页面的通用布局,我可以在其中放置或删除其他组件。
我的应用程序结构大致如下:
-/bower_components
-/core
-/login
--login.component.js
--login.module.js
--login.template.html
-/register
--register.component.js
--register.module.js
--register.template.html
-app.css
-app.module.js
-index.html
回答这个问题可能有点主观,但我个人在基于组件的 Angular 应用程序中所做的是创建一个封装所有其他组件的组件。
我发现无需在每个组件中调用服务即可共享登录信息特别有用。 (并且无需将用户数据存储在 rootScope、浏览器存储或 cookie 中。
例如,您可以像这样创建一个组件父级:
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>
中的每个组件都能够 'inherit' 像这样的主组件:
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-router 稳定版本):
.state('home',
{
url : '/home',
template : '<home></home>'
})
这将有效地在 <ui-view>
新版本的 ui-router 包含组件路由。