2

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

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

2 回答 2

3

延迟调用foo()using $evalAsync()

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

fiddle

您也可以使用$timeout()代替$evalAsync(). 两者都允许先执行链接功能。

于 2013-07-22T19:28:38.517 回答
1

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

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

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

如果您尝试在链接函数中设置 foo 函数以访问指令范围变量,请查看“范围:”指令属性中的指令委托函数和绑定变量。角度指令教程给出了一个有点迟钝的版本作为它的最后一个示例(“zippy”),Angularjs Directive Delegate 不通过中间处理程序触发提供了一个可以从模板本身调用的委托函数的示例。

于 2013-07-22T15:36:35.677 回答