以下代码示例(取自AngularJS ui-router wiki)说明了我的问题。
angular.module('myApp', ['ui.router', 'ui.router.stateHelper'])
.config(function(stateHelperProvider){
stateHelperProvider.setNestedState({
name: 'root',
templateUrl: 'root.html',
children: [
{
name: 'contacts',
templateUrl: 'contacts.html',
children: [
{
name: 'list',
templateUrl: 'contacts.list.html'
}
]
},
{
name: 'products',
templateUrl: 'products.html',
children: [
{
name: 'list',
templateUrl: 'products.list.html'
}
]
}
]
});
});
具体来说,这些行:
}
]
}
]
});
});
我发现这非常难看。有没有办法避免这些?
注意:我意识到CoffeeScript可以提供一些帮助,但我主要对使用Javascript可以做些什么感兴趣。
答案 0 :(得分:3)
总是分而治之:
function appropriateNameHere(stateHelperProvider) {
var contacts, products, state;
contacts = {
name: 'contacts',
templateUrl: 'contacts.html',
children: [{
name: 'list',
templateUrl: 'contacts.list.html'
}]
};
products = {
name: 'products',
templateUrl: 'products.html',
children: [{
name: 'list',
templateUrl: 'products.list.html'
}]
};
state = {
name: 'root',
templateUrl: 'root.html',
children: [contacts, products]
};
stateHelperProvider.setNestedState(state);
}
angular.module(
'myApp',
['ui.router', 'ui.router.stateHelper']
).config(appropriateNameHere);
你画线的地方几乎完全是主观的/基于意见的。有些人会按原样使用你的代码,其他人会觉得它需要比我上面做的更精细。但这是应用您的意见时使用的基本技术。 : - )
答案 1 :(得分:1)
您可以创建函数,而不是使用匿名函数。 您也可以使用变量而不是直接传递数据。
答案 2 :(得分:0)
有没有办法避免这些?
您可以尝试Coffeescript,在那里写下
angular.module("myApp", [
"ui.router"
"ui.router.stateHelper"
]).config (stateHelperProvider) ->
stateHelperProvider.setNestedState
name: "root"
templateUrl: "root.html"
children: [
{
name: "contacts"
templateUrl: "contacts.html"
children: [
name: "list"
templateUrl: "contacts.list.html"
]
}
{
name: "products"
templateUrl: "products.html"
children: [
name: "list"
templateUrl: "products.list.html"
]
}
]
但不,一般情况下你无法避免它们。