Angularjs angular.js在指令中从$evalAsync内部获取元素
我发现我经常在指令中使用scope.$evalAsync。主要用于执行需要编译所有模板{{vars}}的DOM stuff/jquery插件 我可以从$evalAsync内部获取scope对象,但不能从元素中获取。在最新的例子中,我正在操作一个元素,该元素使用ngRepeat进行渲染。我目前通过基于scope对象组合一个jquery选择器来获取元素,例如Angularjs angular.js在指令中从$evalAsync内部获取元素,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我发现我经常在指令中使用scope.$evalAsync。主要用于执行需要编译所有模板{{vars}}的DOM stuff/jquery插件 我可以从$evalAsync内部获取scope对象,但不能从元素中获取。在最新的例子中,我正在操作一个元素,该元素使用ngRepeat进行渲染。我目前通过基于scope对象组合一个jquery选择器来获取元素,例如 scope.$evalAsync(function (scope) { $("#item-" + scope.id).runJQplu
scope.$evalAsync(function (scope) {
$("#item-" + scope.id).runJQplugin();
})
虽然这是可行的,但对我来说,这样做更直观
scope.$evalAsync(function (scope,element) {
element.runJQplugin();
})
我是在接近这一点,还是我误解了指令的一些基本内容?您始终可以通过闭包范围从指令的链接和控制器访问元素。因此,在链接功能中:
link: function(scope, elem, attrs) {
...
scope.$evalAsync(function(scope) {
elem.runJQplugin();
});
...
},
控制器(您需要指定特殊的$element
依赖项):
我已经在我的指令中尝试了最重要的例子,但我得到了引用错误:elem没有定义fiddle/plunk会有帮助。你的权利我在fiddle中尝试了一个赤裸裸的版本,它可以工作,但是重新访问我的代码它肯定不能。所以我在做一些奇怪的事情。哦,我现在正在使用$(“#item-”+scope.id)。
controller: ["$scope", "$element", function($scope, $element) {
...
scope.$evalAsync(function(scope) {
$element.runJQplugin();
});
...
}],