评估ng-controller中的表达式

时间:2013-10-26 09:46:43

标签: javascript angularjs angularjs-scope angularjs-controller

我的Javascript

var app = angular.module('Demo', []);

app.controller('DemoCtrl', function ($scope) {
  $scope.expr = "Test"
});
app.controller('Test', function ($scope) {
  $scope.HELLO = "HEllo World";
});

我的标记

<body ng-controller="DemoCtrl">
  <div ng-controller="{{expr}}">{{HELLO}}</div>
</body>

这不起作用。文档说ng-controller可以评估表达式。我做错了什么?

JSBIn Linkhttp://jsbin.com/ubevel/13/edit

2 个答案:

答案 0 :(得分:6)

将控制器写为函数(而不是app.controller('Test'

将JS更改为:

var app = angular.module('Demo', []);

app.controller('DemoCtrl', function ($scope) {
  $scope.expr = Test;
});

function Test($scope) {
     $scope.HELLO = "HEllo World";
}

和HTML:

<body ng-controller="DemoCtrl">
  <div ng-controller="expr">{{HELLO}}</div>
</body>

演示 JS BIn

答案 1 :(得分:3)

这是预期的行为,更清楚地阅读文档进一步澄清了它:

  

全局可访问的构造函数的名称或当前作用域上的表达式求值为构造函数。

因此,可以使用字符串,也可以使用返回控制器构造函数的表达式,但不能返回返回字符串的表达式,该字符串是控制器的名称。

至于如何使它工作,Maxim已经在很大程度上回答了你的问题:让expression返回控制器的构造函数。