我试图理解为什么必须使用as
以便双向绑定在控制器内与this
一起使用。
工作示例:
<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 :(得分:1)
如果要在控制器中使用this
,则需要使用controller as
语法,否则必须在控制器中使用$ scope。如果您没有使用controller as
,则控制器需要:
app.controller('MyController', function($scope){
$scope.test = function test(){
return "test";
};
});
并且视图必须是:
<div ng-controller="MyController">
{{test()}}
</div>
controller as
语法的一个好处是它有助于促进使用&#34;点缀&#34;视图中的对象有助于避免在没有&#34; dotting&#34;的情况下可能发生的任何引用问题。有关范围参考问题的更多信息,请查看this post
答案 1 :(得分: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应该一直都是正确的。
答案 2 :(得分:0)
感谢Wayne Ellery:
这是因为Angular在1.2中添加了控制器作为语法,这使您可以使用它。 ng-controller =“MyController as myController”。可以把它想象成var myController = new MyController();.它本质上是将MyController的一个实例作为范围确定。