AngularJS |控制器中条件初始化的更好方法
AngularJS | Better approach for conditional initialization in controller
在我们当前的AngularJS应用程序中,我们有三个选项卡,三个不同的控制器用于绑定它们。
var myApp = angular.module('MyApp',[]);
myApp.controller('Tab1Ctrl', function(){
// logic to initialize Tab1
});
myApp.controller('Tab2Ctrl', function(){
// logic to intialize Tab2
});
myApp.controller('Tab3Ctrl', function(){
// logic to initialize Tab3
});
我们的意图是将这些控制器合并为一个控制器,但相应地初始化这3个选项卡。为此,我们在ui-router
中使用resolve
。特定选项卡所需的所有数据都加载在解析中,并且当前状态名称保存在MyService
中。
myApp.config(function($stateProvider){
$stateProvider.state('tab1', {
url: '/tab1',
controller: 'TabCtrl',
templateUrl: 'tab1.html',
resolve: {
tabData: function(MyService) {
MyService.setState('tab1');
return MyService.getTab1Data();
}
}
}).state('tab2', {
url: '/tab2',
controller: 'TabCtrl',
templateUrl: 'tab2.html',
resolve: {
tabData: function(MyService) {
MyService.setState('tab2');
return MyService.getTab2Data();
}
}
});
});
myApp.controller('TabCtrl', function($scope, MyService, tabData){
/* Check for state name and initialize */
if(MyService.getState() === 'tab1'){
/* Use the data loaded in resolve and assign it to scope*/
$scope.tab1Prop = tabData.prop1;
}
else if(MyService.getState() === 'tab2'){
/* Use the data loaded in resolve and assign it to scope*/
$scope.tab2Prop = tabData.prop2;
}
});
请注意,对于每个选项卡,我们需要在$scope
上设置的属性是不同的。最后,我的问题是,有没有更好的方法在单个控制器中进行这种条件初始化?
MyService.getState()
的结果存储在一个变量中,并与之进行比较,而不是每次检查都调用它。
您的州提供商:
myApp.config(function($stateProvider){
$stateProvider.state('tab1', {
url: '/tab1',
controller: 'TabCtrl',
templateUrl: 'tab1.html',
resolve: {
tabData: { tabState: 'tab1',
initData: {'tab1propA': 'tabby1valueA',
'tab1propB': 'tabby1valueB'
}
}
}
}
}).state('tab2', {
url: '/tab2',
controller: 'TabCtrl',
templateUrl: 'tab2.html',
resolve: {
tabData: { tabState: 'tab2',
initData: {'tab2propA': 'tabby2valueA',
'tab2propB': 'tabby2valueB'
}
}
}
}
});
});
您的控制器:
myApp.controller('TabCtrl', function($scope, MyService, tabData){
angular.forEach(tabData.initData, function(value, key) {
$scope[key] = value;
};
/* Check for state name and initialize */
if(tabData.tabState === 'tab1'){
//whatever else for tab1
} else if(tabData.tabState === 'tab2'){
//whatever else for tab2
};
});
相关文章:
- 在JavaScript中拆分日期字符串的更好方法是什么
- 设置嵌套对象属性的更好方法
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 将数组从javascript格式化为php的更好方法,反之亦然
- jquery:将动画绑定到滚动条位置的更好方法
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 编写if-else语句的更好方法
- 传递promise回调方法的更好方法
- 在Knockoutjs中设置计算对象的observableArray的更好方法
- 从网页获取数据的更好方法,而不是使用DOM和HTML元素
- Backbone js代码气味-嵌入子视图的更好方法
- 从数组中删除项的更好方法
- 对多维数组进行分组的更好方法
- 在node.js和express中基于路径运行不同数据库查询的更好方法
- 动态更改测试中代码覆盖率的require语句的更好方法
- 设计具有数据持久性的web应用程序的更好方法
- 选择表行的更好方法
- 在nodejs服务器上提供文件的更好方法,而不是if/else
- Javascript;Ajax——填充对象的更好方法