Angularjs 转置块中父组件的角度组件访问范围

Angularjs 转置块中父组件的角度组件访问范围,angularjs,Angularjs,我想访问transclude块中的绑定,这里有一个小示例: <datagetter> <dataviewer data="$ctrl.data"></dataviewer> </datagetter> datagetter组件通过服务获取一些数据并将其存储在局部变量中,例如tempalte中的this.data$ctrl.data-现在我想在transclide block dataviewer中设置的组件中访问这些数据 为了解决这个问题,我

我想访问transclude块中的绑定,这里有一个小示例:

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