Angular Controller as NewController 2路绑定与this.function一起使用

时间:2015-02-09 11:31:49

标签: angularjs

我试图理解为什么必须使用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>

3 个答案:

答案 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的一个实例作为范围确定。