从范围角度Js调用控制器方法

时间:2014-06-11 08:59:08

标签: javascript angularjs events dynamic controller

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 () {
               ... 
            };
        }
    };
});

2 个答案:

答案 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 返回未定义时出错。