2015-10-13 60 views
3

比方说,我有一个directive,其中包含“contextMenuId”的传入attributeAngular:获取编译元素的范围

在这个指令我现在执行:

contextMenu = $('[id*="' + iAttrs.contextMenuId+'"]'); 

或...

contextMenu = angular.element(document.querySelector('[id*="' + iAttrs.contextMenuId+'"]')) 

如果这些不这样做同样的事情,我会喜欢它,如果有人可以告诉我差异,但这与我的答案是分开的。

现在,让我们看看我们的contextMenu

<ul id="exampleContextMenu" context-menu-defs="contextMenuDefs" ></ul> 

我想从我前面提到的指令访问数组contextMenuDefs,然而,这是从一个完全不同的scope,我没有进入。

我能以某种方式访问​​scopecontextMenu是从我的指令中编译的吗?谢谢!

+0

是的,可以。你可以在你有contextMenu的地方添加你的指令代码吗? – dfsq

+0

为什么在角度指令中使用'$'?使用传递给'link'的第二个参数。请参阅https://docs.angularjs.org/guide/directive – tcooc

+0

@tcooc“link”的第二个参数?你的意思是'元素'?是的,这是一个基于jQuery的句柄来调用你的指令的DOM元素。我不能用它来调用另一个元素。我可以使用'angular.element(document.querySelector('[id * =''+ iAttrs.contextMenuId +'“]'))',但我认为我会走出一条腿并使用jQuery一次。我刚才建议的'角度'方式应该有更好的表现。我决定更新我的答案,以这种“有角度的方式”。 – WebWanderer

回答

2

您可以使用范围得到其他元素:

angular.element("<selector as jquery>")).scope(); 

在您的情况:

var scopeOuther = angular.element('[id*="' + iAttrs.contextMenuId+'"]')).scope(); 
+0

没办法!那正是我想要的!让我试试这个。我太激动了! – WebWanderer

+0

它的工作原理。谢谢你,先生。 – WebWanderer