5

我建立一個component based app項目,角1.5.5角通過另一個組件

我與d3js一些.floating-node併爲每個創建獲得新的範圍我創建了一個新的$範圍並追加內編譯組件

的這部分代碼如下所示:

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

您的案例中不需要使用$scope.$new(),因爲$compile已經創建了範圍的新實例。

爲您解決問題的更簡單的方法是使用querySelector,我猜做類似下面的代碼應該可以幫助您:

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

這種方式,您現在應該能夠通過newscope的傳遞數據。

2

似乎有一個誤解。 .component將始終創建它自己的隔離範圍,並且您只需在組件中不使用$scope。如果您認爲在您的情況下絕對必要,請使用.directive。我建議適當地重新設計你的組件。

+0

你是對的!所以我沒有創建一個新的'$ scope',而是使用了'$ compile'創建的。但是探針現在有所不同,我如何從(第一個)控制器獲取新的範圍? –