带控制器的路由:在路由或模板定义中?

时间:2015-10-16 09:20:09

标签: javascript angularjs routes

在使用模板定义路线时,基本上有两种方法可以设置与视图对应的控制器:

  • 在路线中:

    $routeProvider
    .when('/phone/:phoneId', {
         controller: 'PhoneDetailController',
         templateUrl: 'phone.detail.html',
         }
    });
    
  • 在模板中:

    $routeProvider
    .when('/phone/:phoneId', {
         templateUrl: 'phone.detail.html',
         }
    });
    
      
    <div ng-controller="PhoneDetailController">
      <!-- [...] -->
    </div>
    

有什么不同,推荐什么,为什么?

2 个答案:

答案 0 :(得分:2)

如果查看ui-router源代码,在viewDirective.js内可以看到如何实例化控制器:

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

所以基本上你的两个选择基本上都是一样的。所以这取决于你,以及你认为最好的语义。我个人更喜欢将我的控制器名称放在状态def中,因为我喜欢将模板保持为面向视图(并且可重用)。此外,它似乎是最常用的做事方式,因此其他人将能够更轻松地理解您的代码。

答案 1 :(得分:0)

我个人使用的是第一个版本,因为它具有更好的中央配置。我认为没有太大的区别,但是像Filype的评论中我经常看不到版本2.