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

how do you get a reference to the directive object instance in angularJS?

本文关键字:对象 指令 实例 引用 angularJS      更新时间:2023-09-26

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

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访问的(奇怪但有效!!)。

它不能通过设计来完成。您不应该试图直接获取指令对象。

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

例如:

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