Как получить переменную из области действия двумя уровнями выше в изолированную область - PullRequest
0 голосов
/ 19 февраля 2019

У меня проблемы с получением конкретной переменной в рамках только что созданной директивы.Эта переменная находится в области, которая на два уровня выше (то есть между областью, к которой я хочу получить доступ, и той, которую я только что создал, есть другая область).Моя проблема в том, что я понятия не имею, откуда взялась эта промежуточная область, и я не знаю, как передать переменную в область, если переменная, которую я хочу, находится в родительской области.Я мог бы сделать это вручную следующим образом:

$scope.var = $scope.$parent.$parent.var

Но возникает проблема, если переменная в родительской родительской области равна нулю.Не говоря уже обо всем этом дополнительном JavaScript, было бы утомительно и ненужно.На данный момент я обошел это, используя setInterval, чтобы проверять, имеет ли оно значение NULL каждые 5 секунд, и делать соответствующее назначение, если это не так.

Как бы я мог исправить структуру областей, чтобы я мог простоиспользование:

scope: {
   var: '='
}

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Возможно, вы могли бы сделать свой $ scope.var равным глобальной переменной, так как область видимости родителя передается через его дочерние элементы, что означает, что вы можете получить доступ к объектам области видимости вашего родителя, когда вы находитесь на уровне их дочерних элементов.хотя условие не должно конфликтовать имя объекта $ scope с именем объекта $ scope ваших детей, так как это перезапишет объект.

0 голосов
/ 19 февраля 2019

В зависимости от конкретной потребности у вас в основном есть 4 варианта:

1) Общая оценка (если это ваша директива, вы можете установить scope=false) - тогда вы сможете напрямую получить доступ к переменным из paren 'Директива t.

Но это не сработает, если вам нужно получить доступ к 2 областям выше и промежуточная область не является общей.

2) Объявить изолированную область scope = { var: 'var' } и явно передатьпеременная из родительской области в атрибуты тега вашей директивы.

3) Не использовать область вообще - вы можете отправить переменную как часть метода $ broadcast из родительской в ​​дочернюю область и из метода $ emit из дочернего в родительский.

4) Внедрить службу как в родительский, так и в дочерний контроллер и использовать переменную совместно с помощью этой службы.

0 голосов
/ 19 февраля 2019

Я нашел решение. В созданной директиве мне нужно было передать нужную мне переменную.Например:

<my-directive myVar="var"></my-directive>

А в JavaScrpit:

scope: {
   var: 'myVar'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...