Javascript 带控制器的管线:在管线或模板定义中?
使用模板定义管线时,基本上有两种方法可以设置与视图对应的控制器:Javascript 带控制器的管线:在管线或模板定义中?,javascript,angularjs,routes,Javascript,Angularjs,Routes,使用模板定义管线时,基本上有两种方法可以设置与视图对应的控制器: 在路线上: 在模板中: 有什么区别,推荐什么,为什么?我个人使用第一个版本是因为它的配置更好、更集中。我认为没有太大的区别,但就像Filype的评论一样,我并不经常看到版本2。如果您查看ui路由器源代码,您可以看到控制器是如何实例化的: if (locals.$$controller) { locals.$scope = scope; locals.$element = $element; v
- 在路线上:
- 在模板中:
有什么区别,推荐什么,为什么?我个人使用第一个版本是因为它的配置更好、更集中。我认为没有太大的区别,但就像Filype的评论一样,我并不经常看到版本2。如果您查看ui路由器源代码,您可以看到控制器是如何实例化的:
if (locals.$$controller) {
locals.$scope = scope;
locals.$element = $element;
var controller = $controller(locals.$$controller, locals);
if (locals.$$controllerAs) {
scope[locals.$$controllerAs] = controller;
}
$element.data('$ngControllerController', controller);
$element.children().data('$ngControllerController', controller);
}
所以基本上你的两个选择将做基本上相同的事情。所以这取决于你,以及你认为最好的语义学是什么。就我个人而言,我更喜欢将我的控制器名称放在state def中,因为我喜欢尽可能使我的模板面向视图(并且可重用)。此外,这似乎是最常见的方法,因此其他人将能够更容易地理解您的代码。我似乎没有使用第二种方法,第一种方法非常标准。我们没有使用ui路由器,但我明白了要点。谢谢抱歉,我错过了。但是,是的,这是大致相同的概念。在这一点上,我从不使用内置路由器,总是为我的角度项目选择ui路由器。使用起来好多了。
$routeProvider
.when('/phone/:phoneId', {
templateUrl: 'phone.detail.html',
}
});
<div ng-controller="PhoneDetailController">
<!-- [...] -->
</div>
if (locals.$$controller) {
locals.$scope = scope;
locals.$element = $element;
var controller = $controller(locals.$$controller, locals);
if (locals.$$controllerAs) {
scope[locals.$$controllerAs] = controller;
}
$element.data('$ngControllerController', controller);
$element.children().data('$ngControllerController', controller);
}