如何从控制器调用指令作用域上的函数

How to call a function on a directive scope from the controller

本文关键字:作用域 函数 指令 调用 控制器      更新时间:2023-09-26

我在互联网上搜索了很多,但找不到解决方案,请帮忙!

directive('menu',function(){
    return{
        link : function(scope,element,attrs){
            scope.foo = function(){
            alert('test!');
            }
        },
        controller : function($scope){
            $scope.foo();
        }
    }
});

使用$evalAsync():延迟对foo()的调用

controller : function($scope){
    $scope.$evalAsync(function() {
        $scope.foo();
        console.log($scope);
    });
}

小提琴

您也可以使用$timeout()而不是$evalAsync()。两者都允许首先执行链接函数。

正如Ye Liu所说,您的控制器调用指令的编译然后链接函数。从角度指令文档(http://docs.angularjs.org/guide/directive):

控制器在预链接阶段之前实例化

控制器将在您的应用程序范围内,一旦后链接功能完成,您的指令将成为此范围的子指令。请考虑链接函数的目的是将模型数据绑定到模板,并为绑定的变量设置监视,而不是创建一个谨慎的"指令对象"。

如果您试图在链接函数内部设置foo函数以访问指令范围变量,请查看"scope:"指令属性中的指令委托函数和绑定变量。angular指令教程给出了一个有点迟钝的版本作为它的最后一个例子("zippy"),Angularjs指令委托没有通过中介处理程序激发,给出了可以从模板本身调用的委托函数的例子。