在ng-controller中评估表达式

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

需要这样做的用例是什么?可能有其他实现需求的方法。 - charlietfl
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


1
将其声明为控制器有什么问题吗?我通常会这样声明:active_new_app.controller('newActiveOrdersCountCtrl', ['$scope', '$rootScope', 'newActiveOrdersCountModel', function($scope, $rootScope, newActiveOrdersCountModel){ $scope.count_data = newActiveOrdersCountModel; }]); 这种格式的好处被忽略了。 - Abhik
谁告诉你你失去了好处?看看这个JSBin,我添加了工厂:http://jsbin.com/ubevel/19/edit - Maxim Shoustin
1
当Test($scope, helloWorldFromFactory)被最小化时,helloWorldFromFactory将被更改为其他内容,它再也无法识别该工厂。 - Abhik
Div ng-controller="expr" 是用来做什么的? - TheBlackBenzKid
@TheBlackBenzKid expr 是作用域值。 - Maxim Shoustin
显示剩余2条评论

3
这是预期行为,并且进一步阅读文档可以更清楚地说明:
全局可访问的构造函数的名称或在当前范围内计算为构造函数的表达式的名称。
因此,可以使用字符串,也可以使用返回控制器构造函数的表达式,但不能使用返回控制器名称的字符串表达式。
至于如何使其工作,Maxim已经大部分回答了你的问题:通过使表达式返回控制器的构造函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接