3

我的 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 链接http://jsbin.com/ubevel/13/edit

4

2 回答 2

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

于 2013-10-26T09:54:02.853 回答
3

这是预期的行为,对文档的更清晰阅读进一步阐明了这一点:

全局可访问的构造函数的名称或在当前范围内计算为构造函数的表达式。

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

至于如何使其工作,Maxim 已经在很大程度上回答了您的问题:通过将expression返回作为控制器的构造函数。

于 2013-10-26T15:20:19.673 回答