如果Angular2没有控制器,为什么在Angular 1.5+中推荐它?

时间:2017-02-10 16:56:57

标签: angularjs

因此,在Angular 2中没有controllerAs语法,组件的属性可以直接在模板中使用,例如就像在这个组件中一样:

@Component({
    selector: 'component-a',
    template: `<div class="component-a">
                <div class="counter" (click)="increment()">Component A: {{counter}}</div>
              </div>`
})
export class ComponentA {

    counter = 0;

    increment() {
        this.counter += 1;
    }

}

(从What is the analog of the 'controllerAs' directive's property in Angular 2 component?复制)

这就像我开始编写Angular 1.x&lt; 1.5从一开始。然后“他们”说“最好使用controllerAs语法”。现在我的代码中几乎无处不在$ctrl.myThing。甚至更多,在一些教程中,他们建议你切换到控制器,以便更接近Angular 2.但它似乎离语法更远了?

我的意思是我明白了,当你使用实际的控制器和视图并做类似的事情时,它会更好:

<div ng-controller="MainCtrl">
  {{ title }}
  <div ng-controller="AnotherCtrl">
    {{ title }}
    <div ng-controller="YetAnotherCtrl">
      {{ title }}
    </div>
  </div>
</div>

但是我从来没有这样做,并且对所有这些情况都使用了指令/组件。因此,当我在Angular 1.5+中的整个架构无论如何都基于组件时,那么控制器的优势是什么?无论如何我有一个孤立的范围......那么为什么不直接使用无控制器,所以它与Angular 2的语法相同?我的意思是,移植它很容易,因为我可以在项目中的所有$ctrl.上进行查找和替换,我只想了解控制器在这种情况下带来哪些好处(如果有的话)。

再举一个例子: 这是

  <button class="btn btn-default" ng-click="$ctrl.sayHello()">
    Hello {{$ctrl.somebinding}}
  </button>

喜欢这个

  <button class="btn btn-default" ng-click="sayHello()">
    Hello {{somebinding}}
  </button>

作为Angular 1.5+ 组件的模板,隔离范围,如果是为什么,因为后者的语法实际上更接近角2?

1 个答案:

答案 0 :(得分:0)

controllerAs应该用于指令和控制器,当然不是组件。 (一些像lib引导程序,角度材料,ui路由器的库没有迁移到1.5-1.6并且仍然需要控制器)

猜猜大多数推荐'controllerAs'是在Angular 1.5之前编写的 - 当时没有组件。

我只是意味着在组件中你有控制器作为$ ctrl,并且在控制器语法中没有必要。如果你有兴趣为什么默认情况下{{prop}}没有被评估为控制器属性 - 核心角度服务$ parse在1.4中使用范围 - 所以当他们添加组件时,他们显然无法改变它。否则,以前的角度版本的所有编写代码都将停止工作。