У меня есть на моем сайте код, подобный следующему:Как вызвать директиву Angularjs после возврата другой функции?
<div ng-click=someFunction() my-directive>...</div>
<div ng-show=showMe>...</div>
Функция SomeFunction() выглядит следующим образом:
function onSuccess() {
// do something
console.log("in response")
}
function someFunction() {
$http(
{
...
}).then(onSuccess);
}
директива моей директивы создается следующим образом:
app.directive(myDirective, function() {
return {
restrict: 'A',
link: function(scope, $elm) {
$elm.on('click', function() {
console.log("in directive");
//do something
});
}
}
});
Проблема в том, что мне нужна директива для запуска только после того, как onSuccess закончил то, что он загрузил, а не раньше (то есть, я хочу видеть в conso le «в ответе» до «в директиве» и прямо сейчас я вижу «в директиве»)
Похоже, что-то можно сделать, но я не могу найти, как ... Любая помощь/идеи будут оценены!
EDIT: Я только что видел этот ответ: Wait for data in controller before link function is run in AngularJS directive Это не то, что я ищу, как функцию SomeFunction не зависит от директивы, и я хочу, чтобы оставаться как можно более независимыми (функция помещается в контроллере приложения, и я не хочу манипулировать просмотром прямо оттуда).
EDIT 2: Мне известно о возможности использования таймаута, но я бы предпочел использовать более общее решение. С таймаутом мне придется угадать, как долго ждать, и я не хочу полагаться на это.
EDIT 3: Я отредактировал функцию someFunction на более конкретную. Я не могу изменить структуру someFunction, и я не хочу делать работу директивы в onSuccess.
еще раз спасибо!
Это [SO ответ] (HTTP://stackoverflow.com/a/27486190/3567063) может быть то, что вы ищете. Пожалуйста, проигнорируйте этот комментарий. –
@alex_andrea Я бы предложил то же самое, но я не думаю, что он будет работать с директивами атрибутов и прослушивателем кликов на одном и том же объекте. Вы можете добавлять или удалять только элемент с помощью 'ng-if', а не атрибута элемента. –
@ ssc-hrep3 Я никогда об этом не думал. Спасибо за указание.:) –