控制器 - 语法是否意味着视图相关代码应该保持在$ scope之外?

时间:2015-03-22 20:29:31

标签: angularjs

在严格的服务器端MVC中,模型应该对视图一无所知,两者相互分离,控制器充当中介。

在Angular中,$ scope对象充当视图模型,是与DOM松散关联的模型的数据存储。我们可以在这里存储其他与视图相关的辅助函数。例如:

angular.module('app')
  .controller('carouselController', function($scope) {
    $scope.carousel = {
      current: 0,
      next:function() {
        current++;
      }
    };
  });

控制器 - 如

新的控制器 - as语法似乎暗示在$ scope对象中不欢迎视图助手,并且应该在指令中分配助手。

这确实是我们现在正在走的路。

1 个答案:

答案 0 :(得分:1)

Controller-As语法是一种更明确的定义语法。在实践中,一直建议总是有一个点"在控制器变量中。 (换句话说,$scope上的对象的属性,而不是$scope本身的属性。)Controller-As语法是实现此目的的明确方法。

使用Controller-As语法时,

$scope仍然存在;你的" viewmodel"自动置于$scope并显式绑定到控制器。因此,更加明显的是管理对象的值。这在可以从多个控制器设置值的复杂视图场景中尤其有用。此外,$scope不需要注入,除非您特别需要$broadcast()这样的专业用途,这样可以让您的代码更易于阅读。

还应注意,$scope将替换为Angular 2.0中较新的ECMA6Script功能。使用Controller-As将允许您现在设计控制器,它将更接近新的Angular 2.0语法,从而更容易过渡到Angular 2.0(和学习曲线)。

是的,移动"查看辅助功能"尽可能使用指令是推荐的路径,并且在Angular 2.0中新的Component结构很明显。

另一个常见的路径是将辅助函数作为自定义过滤器对象或封装到工厂中。