Angularjs 转置块中父组件的角度组件访问范围
我想访问transclude块中的绑定,这里有一个小示例:Angularjs 转置块中父组件的角度组件访问范围,angularjs,Angularjs,我想访问transclude块中的绑定,这里有一个小示例: <datagetter> <dataviewer data="$ctrl.data"></dataviewer> </datagetter> datagetter组件通过服务获取一些数据并将其存储在局部变量中,例如tempalte中的this.data$ctrl.data-现在我想在transclide block dataviewer中设置的组件中访问这些数据 为了解决这个问题,我
<datagetter>
<dataviewer data="$ctrl.data"></dataviewer>
</datagetter>
datagetter组件通过服务获取一些数据并将其存储在局部变量中,例如tempalte中的this.data$ctrl.data-现在我想在transclide block dataviewer中设置的组件中访问这些数据
为了解决这个问题,我读了这篇文章,这些文章与我的问题很接近:
我知道我可以使用require在childcomponent中获取parentconroller,但这不是一个选项,因为我希望保持通用性,例如,它可以是另一个dataviewer,从datagetter获取相同的数据,也应该在dataviwer从另一个datagetter获取数据的场景中使用
有适合我需要的解决方案吗?非常感谢您的帮助您需要手动转换,这是我在类似情况下所做的。 垂钓者默认的转换将不起作用,因为它创建了一个新的范围
<datagetter>
<dataviewer data="$ctrl.data"></dataviewer>
</datagetter>
transcludeExtended是执行翻译的手动方式,而不是ng transclude
参考:
angular.module("app").component("datagetter", function() {
constructor() {
return {
restrict: 'E',
replace: true,
template: "<div transclude-extended></div>",
transclude: true,
bindToController: true,
controller: function () {
var ctrl = this;
ctrl.data = 'This is sample data.';
}
};
}
});
angular.module("app").directive("transcludeExtended", function(){
constructor() {
return {
link: function ($scope, $element, $attrs, controller, $transclude) {
var innerScope = $scope.$new();
$transclude(innerScope, function (clone) {
$element.empty();
$element.append(clone);
$element.on('$destroy', function () {
innerScope.$destroy();
});
});
}
}
};
});