AngularJS在同一元素上具有模板的两个指令

AngularJS在同一元素上具有模板的两个指令,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在尝试为我的angular应用程序创建上下文菜单指令。 我希望此指令用于应用程序中需要上下文菜单的任何元素 问题是,在我的应用程序中有许多“用户控件”,即用于扩展按钮、输入、网格等的指令。如果我尝试将我的上下文菜单指令放在其中任何一个上,我会得到一个,因为这两个指令都是定义模板的 上下文菜单指令如下所示: angular.module('myApp').directive('myContextMenu', function () { var myContextMenu= {};

我正在尝试为我的angular应用程序创建上下文菜单指令。 我希望此指令用于应用程序中需要上下文菜单的任何元素

问题是,在我的应用程序中有许多“用户控件”,即用于扩展按钮、输入、网格等的指令。如果我尝试将我的上下文菜单指令放在其中任何一个上,我会得到一个,因为这两个指令都是定义模板的

上下文菜单指令如下所示:

angular.module('myApp').directive('myContextMenu', function () {

    var myContextMenu= {};

    myContextMenu.restrict = 'A';

    myContextMenu.templateUrl = 'templates/myContextMenuTemplate.html';

    // Here I have scope and controller with all the functionality

    return myContextMenu;
});
另一个指令,例如:

angular.module('myApp').directive('myGrid', function () {

    var myGrid= {};

    myGrid.restrict = 'E';

    myGrid.templateUrl = 'templates/myGridTemplate.html';

    // Here I have scope, controller and link function with all the functionality

    return myGrid;
});
我想在网格上有一个上下文菜单,在grid指令中,我将能够访问上下文菜单控制器

我尝试的是:
,正如预期的那样失败了

对于如何实现这一点,您有什么解决方案或其他想法吗

提前谢谢


我的角度版本:1.3.8

您可以在指令之间共享控制器,在指令对象的控制器属性上写入相同的控制器。您可以使用transclude将html嵌入到具有自己模板的指令中

这是两个困难的答案,不知道我的网格和上下文菜单模板是什么样子。是否可以包装这两个元素,以便上下文菜单显示在网格元素中(例如,
),并在网格指令中使用transclude?当然,上下文菜单将是
restrict:'A'
。它可能是这样的,那么请您再详细说明一下好吗?我不明白如何将其限制为属性,并将其引用为类。还有更多-如何将属性从网格范围传递到上下文菜单范围?很抱歉,这是误导。带有类的元素只是为了显示html模板,简化了很多。也许这把小提琴解释得更好一点:。不幸的是,没有使用$parent,我无法使它工作,这不是很优雅。但也许你会想出一个最终的解决方案。我正试图按照你的建议在网格模板中排除上下文菜单,它真的表现得很好。现在,我希望能够在网格的控制器中处理上下文菜单的打开事件,也就是说,我希望将函数作为属性传递给上下文菜单指令。你知道吗?我不想设置控制器属性,因为网格有自己的控制器。再次感谢。可以将函数传递到声明范围对象并传递“&”的指令中。然后,您可以使用ng click或其他指令在模板上绑定函数,它将在定义它的范围(控制器)上执行。或者,您可以在控制器上为其发出和事件并lisen。我在聚会上发现活动很快就结束了。不要忘记清除指令中$destroy事件上的事件。很好,我试过了,但有两个问题:第一,当我在上下文菜单指令上创建一个独立的作用域时,转换根本不起作用。第二,即使我将网格的函数传递给上下文菜单指令的link函数,该属性也是未定义的。我所做的是这样的:''其中'onOpen'是myGrid作用域中的一个函数如果您想,您可以尝试使用$parse服务来执行可以从属性中获得的Expersion。。