我正在设置一个指令,它不能有一个独立的范围,因为将有其他指令(第三方)已经在使用它。我需要获取第三方对象的引用并将其作为变量传递给控制器。我怎么能这样做?
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; } ...
那么如何在第三方指令的范围内从第三方提取对象,并在控制器运行之前将其传递到控制器范围的根目录中,并在我自己的指令中指定名称?
答案 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
}
};
}
};
}]);
在棱角分明的指令文档中阅读更多相关内容。