1

我敢肯定,我刚刚错过了一个简单的答案。

http://jsfiddle.net/jonathanwest/pDRxw/3/

本质上,我的指令将包含控件,这些控件将始终在指令本身外部的控制器中调用相同的方法。正如您从上面的小提琴中看到的那样,我可以通过使用control指令上的方法定义属性来完成这项工作,但由于该方法将始终从指令中的同一个按钮调用,我不想定义要调用的方法。edit相反,该指令应该知道在按下该按钮时调用控制器方法。因此, 的定义control将是:

<control title="Custom Title" />

我怎样才能做到这一点?

4

2 回答 2

5

实际上,我认为$parent不建议直接使用这种方式来定义指令。因为实际上对于可以从父控制器调用的函数没有明显的依赖关系,这使得它们更难重用。

我不知道实际用例为什么需要这个,但我假设您使用control了多次并且您不想复制粘贴一堆定义一些常见行为的属性。

在这种情况下,我会推荐一点其他方法:添加一些将定义该行为的指令容器,并且控制将需要此指令作为依赖项:

myApp.directive('controlBehavior', function() {
    return {
        restrict: 'E',
        scope: {
            modifyfunc: '&'
        },        
        controller: function($scope, $timeout) {
            this.modifyfunc = $scope.modifyfunc;
        }
    };
});
myApp.directive('control', function() {
    return {
        restrict: 'E',
        require: '^controlBehavior',
        replace: true,
        scope: {
            title: "@"
        },
        template : '<div>{{title}}<button ng-click="edit()">Edit</button></div>',
        link: function(scope, element, attr, behavior) {            
            scope.edit = behavior.modifyfunc;   
        }            
    }
});

这是一个演示这种方法的小提琴:http: //jsfiddle.net/7EvpZ/4/

于 2013-01-28T10:03:23.503 回答
3

您可以使用当前范围的属性访问父$parent范围。

http://jsfiddle.net/XEt7D/

于 2013-01-28T09:17:14.937 回答