This fiddle должны сделать вещи более ясно, но по сути я назначаю некоторые атрибуты элемента (например, его идентификатор) параметры в своей директиве:Как я могу избежать условий гонки при запуске, когда атрибуты директивы интерполируются?
myApp.directive('myDiv', function() {
return {
restrict: 'E',
replace: true,
scope: {
'elementId': '@',
'displayName': '@',
},
transclude: true,
template: '<div class="my-div" id="{{elementId}}">{{displayName}}<div ng-transclude></div></div>'
}
})
Проблема заключается в том, если я сразу делать вещи при запуске, как и инициализация других директив, эти значения (например, elementId) еще не интерполированы.
Другими словами, если я получаю ссылку на элемент myDiv и распечатываю свой идентификатор, сразу при запуске печатается «{{elementId}}». Но если я подожду короткое время (скажем, одну секунду), то значение, которое было передано как значение атрибуту element-id, напечатано (как и ожидалось).
Если вы откроете консоль во время просмотра скрипта, вы увидите это.
Что я здесь делаю неправильно? Как я могу избежать этого (кроме многих действительно уродливых тайм-аутов при запуске)?
Вы посмотрели на ng-cloak? –
@JoeEnzminger - Я использовал его раньше, но это не проблема отображения. Мой пример значительно упрощен, но общая идея заключается в том, что при первом входе в файл elementId он регистрируется в другой службе. Поэтому вместо того, чтобы пытаться зарегистрировать себя с собственным идентификатором, он регистрируется с помощью «{{elementId}}». Я не думаю, что здесь будет применяться ng-cloak, но дайте мне знать, если я что-то упустил. – Jer