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.$id в Mycomponent$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'. Но теперь проблема в том, как я могу получить свою новую область с ядром (первым) контроллером? –

Смежные вопросы