对于所有新作品,我使用ControllerAs
语法,以便在视图中将控制器称为vm
。哪个好。
但是,我仍然使用$scope
语法的大部分旧代码。特别是我的一个指令使用ng-click="groupClick"
,它通常会调用父控制器的groupClick
上的$scope
函数。此视图使用ContollerAs
语法构建,因此不再适用。
现有代码如下(简化)
<span>{{vm.somePropertyOnController}}</span>
<!-- This is provided by a template I cannot change -->
<a href="" ng-click="groupClick(item)">Test</a>
如何通过调用<a>
获取vm.groupClick
(通过我无法更改的模板提供)。我理想情况下不想将$scope
添加到我的控制器只是为了让groupClick
正常工作
我的控制器代码:
var vm = this;
vm.somePropertyOnController = "yay vm is cool";
// i really dont want to do this! dont make me!
$scope.groupClick = function (group) { console.log("test"); }
答案 0 :(得分:0)
更改您的groupClick功能:
vm.groupClick = groupClick
function groupClick() {
console.log('test')
}
在视图中,您必须使用controllerAs语法:
<div ng-controller="controllerName as ctrl">
<span>{{ctrl.somePropertyOnController}}</span>
<a href="" ng-click="ctrl.groupClick(item)">Test</a>
</div>
答案 1 :(得分:0)
如果您不想更改模板,则需要使用$scope
。无论如何,您可以将功能设置为$scope
和vm
以使用它:
vm.groupClick = $scope.groupClick = groupClick;