AngularJS控制器as而不是$ scope调用$ apply in指令

时间:2014-10-07 14:17:00

标签: angularjs angularjs-directive

我一直在使用控制器作为语法,而不是在我的Angular项目中使用$scope并使用指令遇到问题。我正在尝试使用指令中的scope.$apply()在我的控制器中调用一个函数。但由于我没有在控制器中使用作用域,我收到此错误:未捕获TypeError:undefined不是函数。

我理解为什么因为范围问题,但我的问题是在我的指令中使用控制器而不是$apply使用$scope的正确方法是什么?

JSFiddle示例:http://jsfiddle.net/z6476omb/

angular
    .module('testApp',[])
    .controller('TestCtrl',TestCtrl)
    .directive('updateDirective',updateDirective)


function TestCtrl() {
    var vm = this;
    vm.name = 'Rob'
    vm.updateName = updateName;

    function updateName(new_name) {
        vm.name = 'Robert';
    }
}

function updateDirective() {
    var directive = {
        link: link,
        restrict:'A'
    }

    return directive;

    function link(scope,element,attr) {
        element.on('click',function() {
            console.log('trying to change...');
            scope.$apply(scope.updateName());
        });
    }
}

1 个答案:

答案 0 :(得分:1)

一种方法是使用您使用的别名来引用控制器范围:ctrl

因此,在您的指令中,您可以将其称为:scope.ctrl.updateName()

请参阅此处的小提琴:

http://jsfiddle.net/z6476omb/1/