将ControllerAS与$ scope

时间:2015-11-11 14:01:15

标签: angularjs angularjs-scope angularjs-controlleras

对于所有新作品,我使用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"); }

2 个答案:

答案 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。无论如何,您可以将功能设置为$scopevm以使用它:

vm.groupClick = $scope.groupClick = groupClick;

See it run