Angular 通过另一个组件获得新的范围

Posted

技术标签:

【中文标题】Angular 通过另一个组件获得新的范围【英文标题】:Angular get new scope through another component 【发布时间】:2017-01-03 06:44:24 【问题描述】:

我正在使用 angular 1.5.5

构建一个 component based app 项目

我正在使用 d3js 创建一些 .floating-node,并为每个创建一个 new $scope 并附加到一个已编译组件中。

这部分代码如下:

    nodeEnter.each(() => 
        let childScope = this.$scope.$new();
        childScope.test = "test";
        let compiled = this.$compile('<mycomponent></mycomponent>')(childScope);
        (this.mainContainer).append(compiled);
    );

这部分代码完美运行。

这是mycomponent

export default class Mycomponent 
    constructor($scope) 
        console.log($scope.test);         // undefined
        console.log($scope.$parent.test); // test
    

Mycomponent.$inject = ["$scope"];

但是当我进入我的mycomponent 组件时。我找不到正确的$scope

我检查了$id 并了解childScope.$idMycomponent $scope.$id += 1

我知道我可以通过 $scope.$parent 解决问题,但我会创建不受欢迎的 $scope,而且它并没有真正被循环使用。

那么我怎样才能得到相同的$scope

【问题讨论】:

【参考方案1】:

似乎有误会。 .component 将始终创建它自己的、隔离的范围,您根本不要在组件中使用 $scope。如果您认为在您的情况下绝对有必要,请使用.directive。我建议您适当地重新设计您的组件。

【讨论】:

你是对的!所以我没有创建一个新的$scope,而是使用了$compile 创建的那个。但是现在探针不同了,我怎样才能从(第一个)控制器中获取我的新范围?【参考方案2】:

您不需要在您的情况下使用$scope.$new(),因为$compile 已经在创建一个新的范围实例。

解决您的问题的更简单方法是使用 querySelector,我想执行以下代码应该可以帮助您:

newScope = angular.element(document.querySelector("#myId")).isolateScope();

这样您现在应该可以通过 newScope 传递数据了。

【讨论】:

以上是关于Angular 通过另一个组件获得新的范围的主要内容,如果未能解决你的问题,请参考以下文章

angular js 初学

阿里巴巴即将开源Angular组件库NG-ZORRO

通过将组件名称指定为输入参数,将 Angular 组件导入另一个组件

Angular 1.5 通过使用另一个组件在函数中返回 html 结果

Angular (v2) 扩展系列组件通信(无父或外部服务)

Angular 2从服务访问组件变量,即绑定到另一个服务,该服务绑定到组件