AngularJs“控制器为"语法 - 澄清? [英] AngularJs "controller as" syntax - clarification?

查看:19
本文介绍了AngularJs“控制器为"语法 - 澄清?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  • controller as plunker
  • I read about the new syntax from angularJS regarding controller as xxx

    The syntax InvoiceController as invoice tells Angular to instantiate the controller and save it in the variable invoice in the current scope.

    Visualization :

    Ok , so I wont have the parameter $scope in my controller and the code will be much cleaner in the controller.

    But

    I will have to specify another alias in the view

    So Until now I could do :

    <input type="number" ng-model="qty"  />
    
    ....controller('InvoiceController', function($scope) {
       // do something with $scope.qty <--notice
    

    And now I can do :

     <input type="number" ng-model="invoic.qty"  /> <-- notice 
    
      ....controller('InvoiceController', function() {
           // do something with  this.qty  <--notice
    

    Question

    What is the goal of doing it ? removing from one place and add to another place ?

    I will be glad to see what am I missing.

    解决方案

    There are several things about it.

    Some people don't like the $scope syntax (don't ask me why). They say that they could just use this. That was one of the goals.

    Making it clear where a property comes from is really useful too.

    You can nest controllers and when reading the html it is pretty clear where every property comes.

    You can also avoid some of the dot rule problems.

    For example, having two controllers, both with the same name 'name', You can do this:

    <body ng-controller="ParentCtrl">
        <input ng-model="name" /> {{name}}
    
        <div ng-controller="ChildCtrl">
            <input ng-model="name" /> {{name}} - {{$parent.name}}
        </div>
    </body>
    

    You can modify both parent and child, no problem about that. But you need to use $parent to see the parent's name, because you shadowed it in your child controller. In massive html code $parent could be problematic, you don't know where that name comes from.

    With controller as you can do:

    <body ng-controller="ParentCtrl as parent">
        <input ng-model="parent.name" /> {{parent.name}}
    
        <div ng-controller="ChildCtrl as child">
          <input ng-model="child.name" /> {{child.name}} - {{parent.name}}
        </div>
    </body>
    

    Same example, but it is much much clearer to read.

    这篇关于AngularJs“控制器为"语法 - 澄清?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆