5

buduję component based app projekt z kątowej 1.5.5kątowa dostać nowy zakres pośrednictwem innego składnika

tworzę z d3js trochę .floating-node i dla każdego i stworzyć nowy $ zakres i dołącz Wewnątrz skompilowany komponent.

Ta część kodu wyglądać tak:

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

Ta część prac kodu idealnie.

A to mycomponent

export default class Mycomponent { 
    constructor($scope) { 
     console.log($scope.test);   // undefined 
     console.log($scope.$parent.test); // test 
    } 
} 
Mycomponent.$inject = ["$scope"]; 

Ale kiedy się w moim mycomponent komponentu. Nie mogę uzyskać prawa $scope.

Sprawdziłem $id i zrozumieć, że childScope.$id jest w Mycomponent$scope.$id += 1

wiem, że mogę dotrzeć z $scope.$parent ale będę tworzyć niepożądaną $scope, a to nie jest naprawdę ceniona w pętli.

Jak mogę uzyskać ten sam $scope?

Odpowiedz

1

Nie musisz używać $scope.$new() w twoim przypadku, ponieważ $compile już tworzy nowe wystąpienie zakresu.

Łatwiejszy sposób na rozwiązanie problemu jest użycie querySelector, myślę, że robi coś tak jak poniższy kod powinien pomóc:

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

ten sposób powinieneś teraz być w stanie przekazać dane przez newScope .

2

Wygląda na to, że istnieje nieporozumienie. .component będzie zawsze tworzył własny, izolowany zakres i po prostu nie użyjesz $scope w komponentach. Jeśli uważasz, że jest to absolutnie konieczne w twoim przypadku, użyj .directive. Zalecam jednak przeprojektowanie twojego komponentu.

+0

Masz rację! Więc nie stworzyłem nowego '$ scope' i użyłem tego stworzonego przez' $ compile'. Ale problem jest teraz inny, jak mogę uzyskać mój nowy zakres z kontrolera (pierwszego)? –