在angular中,是否可以在控制器运行之前有一个指令向范围添加变量?

时间:2014-10-10 20:35:28

标签: javascript angularjs

我正在设置一个指令,它不能有一个独立的范围,因为将有其他指令(第三方)已经在使用它。我需要获取第三方对象的引用并将其作为变量传递给控制器​​。我怎么能这样做?

angular.module('myModule')
    .directive('objectSync', ['$thirdParty', function ($thirdParty) {
    return {
      compile: function() {
          return {
              pre: function(scope, element, attrs) {
                  var thirdPartyObject = $thirdPartyObject.getCurrentScopeObject();
                  scope[attrs.objectSync] = thirdPartyObject;
              }
          };
       }
    };
}]);

这是html:

<third-party-directive
    sync-object-to-controller="objectToSync">

当我这样做时,objectToSync永远不会进入控制器的范围。但是如果我在范围中设置一个容器对象:$scope.containerObject = {},而不是将其添加到范围,而是将其添加到范围:scope.containerObject[attrs.objectSync] = thirdPartyObject;,然后它将通过,但我只能使用watch $scope.$watch(function(){ return $scope.containerObject; } ...

调用它/将监听器附加到它

那么如何在第三方指令的范围内从第三方提取对象,并在控制器运行之前将其传递到控制器范围的根目录中,并在我自己的指令中指定名称?

1 个答案:

答案 0 :(得分:0)

您需要接收传递给第三方指令的参数。

angular.module('myModule')
    .directive('objectSync', ['$thirdParty', function ($thirdParty) {
        return {
            scope : {syncObjectToController : '='} //this receives the parameter
                //the hyphen separated name gets converted to camel casing
            compile: function() {
            return {
                pre: function(scope, element, attrs) {
                    //now you can directly use the third party object here directly
                    var thirdPartyObject = scope.syncObjectToController
                }
            };
         }
     };
}]);

在棱角分明的指令文档中阅读更多相关内容。