2015-02-09 32 views
0

我试图了解为什么我必须使用as为了双向绑定将与控制器内的this角度控制器作为NewController 2方式绑定与this.function

工作示例:

<div ng-controller="MyController as TestController"> 
    {{TestController.test()}} 
</div> 
<script> 
    var app = angular.module('myApp', []); 

    app.controller('MyController', function(){ 
     this.test = function test(){ 
      return "test"; 
     }; 
    }); 
</script> 

不灵例如:

<div ng-controller="MyController"> 
    {{MyController.test()}} 
</div> 
<script> 
    var app = angular.module('myApp', []); 

    app.controller('MyController', function(){ 
     this.test = function test(){ 
      return "test"; 
     }; 
    }); 
</script> 
+0

你不了解它吗?使用'as'允许在'$ digest'循环中进行双向绑定。否则,角度将不会在控制器上有句柄。 – 2015-02-09 11:39:13

+0

https://docs.angularjs.org/guide/concepts#controller – paje007 2015-02-09 11:45:12

回答

1

如果你想使用你的控制器this你需要以其他方式使用controller as语法你必须使用$ scope r控制器。如果您没有使用controller as控制器将需要:

app.controller('MyController', function($scope){ 
    $scope.test = function test(){ 
     return "test"; 
    }; 
}); 

,并认为将需要:

<div ng-controller="MyController"> 
    {{test()}} 
</div> 

之一controller as语法的好处是它有助于促进在视图中使用“虚线”对象有助于避免可能发生的任何参考问题,而不会出现“虚线”。有关示波器参考问题的更多信息,请参阅this post

+0

嗨,谢谢。我知道如何使用控制器,但我不明白为什么“as”允许我使用“this” – 2015-02-09 11:44:22

+1

这是因为Angular在1.2中添加了'controller as'语法,使您可以使用'this'。 'ng-controller =“MyController as myController”'。可以把它看作'var myController = new MyController();'。它基本上是将myController的一个实例作为范围映射到myController。 – 2015-02-09 11:50:19

0

对于您的问题不是一个真正的答案,但通常您会定义要从Controller的$ scope范围内的DOM调用的函数。

例子:

<div ng-controller="MyController"> 
    {{test()}} 
</div> 
<script> 
    var app = angular.module('myApp', []); 

    app.controller('MyController', function($scope){ 
     $scope.test = function test(){ 
      return "test"; 
     }; 
    }); 
</script> 

http://plnkr.co/edit/lbgG9MCJ1kNBhArLpEpc?p=preview

编辑:对不起,忘了在我的岗位,以更新的代码。尽管如此,plnkr应该是对的。

+0

您发布的代码正是OP发布的内容。如果您不使用'controller as'语法,则只使用$ scope。 – 2015-02-09 11:43:53

+0

嗨,谢谢。我知道如何使用控制器,但我不明白为什么“as”允许我使用“this” – 2015-02-09 11:44:57

0

由于韦恩埃勒里:

这是因为角加入1.2控制器的语法,使您可以使用这方面的工作。 ng-controller =“MyController as myController”。把它想象成var myController = new MyController();.它基本上是将myController的一个实例作为范围映射到myController。