Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带控制器的管线:在管线或模板定义中?_Javascript_Angularjs_Routes - Fatal编程技术网

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);
}