如何在angularJS中获得对指令对象实例的引用?

时间:2015-03-20 06:38:30

标签: javascript jquery angularjs angularjs-directive jstree

所以基本上我有一个包装jquery插件的指令(如果重要的话,jsTree)。我想要的只是一种获取指令对象的方法,这样我就可以使用公开的插件对象并进行一些修改,而无需在我的指令中构建一个func。

var ngJSTree = angular.module('jsTree.directive', []);
ngJSTree.directive('jsTree', ['$http',
  function($http) {
    var treeDir = {
      restrict: 'EA',
      fetchResource: function(url, cb) {
        return $http.get(url).then(function(data) {
          if (cb) cb(data.data);
        });
      },
      .
      .
      .
      init: function(s, e, a, config) {
        treeDir.managePlugins(s, e, a, config);
        this.tree = $(e).jstree(config);
        treeDir.manageEvents(s, e, a);
      }
    };

    return treeDir;
  }
]);

我可以很好地实现我自己的注册表机制并将其添加到每个指令的映射中,但有一种更简单的方法,比如可能提供id并访问它。像dojo有dijit.byId或类似jquery插件如何通过dom访问你的东西(很奇怪,但工作!!!)。

1 个答案:

答案 0 :(得分:0)

无法通过设计完成。你不应该试图直接获得指令对象。

相反,需要指令并在链接函数中访问其控制器(这是指令通信的一种方式)。

例如:

<div directive1>
      <div directive2>
      </div>
</div>

脚本

app.directive('directive1', function() {
    return {
        restrict: 'A',
        controller: function firstCtrl($scope) {
            ...
        }
    }
});

app.directive('directive2', function() {
    return {
        restrict: 'A',
        require: '^directive1',
        link: function(scope, element, attr, firstCtrl) {
            ... use firstCtrl ...
        }
    }
});