JQuery to Directive
我想从这个指令的范围调用一个方法,但似乎无法解决(如果可能的话)。
。$( “我的-指令”)第一()范围()loadData();
指令看起来像这样
我想从下面的指令代码中调用loadData函数。
app.directive("myDirective", function () {
return {
restrict: "E",
templateUrl: "..."
scope: {},
controller: function ($scope, $element, $attrs) {
var self = this;
$scope.loadData = function () {
...
};
}
};
});
答案 0 :(得分:1)
范围可在内部指令
中访问您可以获取应用了哪个指令的元素的任何子节点并获得它的范围。
$('my-directive').first().children(":first").scope().loadData()
答案 1 :(得分:0)
Strajk的回答是正确的!
添加代码时动态setTimeout Needed
在以下示例中,详细信息行具有嵌套指令(random-testees)。我从中获取范围以动态编译指令(动态和后期绑定)。 setTimeout 是必需的,因为它似乎需要在
之前var detailRow = e.detailRow;
// Compile the directive for dyanmic content.
angular.element(document).injector().invoke(function ($compile) {
var scope = angular.element(detailRow).scope();
$compile(detailRow)(scope);
});
// Get some data from directive.
var testId = detailRow.find("random-testees").attr("testid");
// Wait, and call method on the directive.
setTimeout(function () {
var randomTesteesScope = $("random-testees").first().children(":first").scope();
randomTesteesScope.loadTestees(this);
}.bind(testId),200);
对此不太自信
这似乎有点脆弱,因为我有时会得到100毫秒超时的混合结果,当 randomTesteesScope 返回未定义时出错。