У меня есть следующий кодБорясь с асинхронным характером AngularJs JavaScript
if (testNavigation() && $scope.selections.somethingChanged) {
return false;
}
в testNavigation Я звоню модальное диалоговое окно и если я отвечу Ok в этом диалоге, я вновь установить somethingChanged ложь. Моя проблема в том, что когда код выполняется, диалог testNavigation и модальный обход и выполняется позже, и поэтому мой тест не работает, так как мне нужно, чтобы он работал. Что я должен изменить, чтобы моя логика правильно работала, например. сначала вызовите мой модальный диалог и действуйте соответственно в основной функции?
Это мой метод testNavigation:
var testNavigation = function()
{
if ($scope.selections.somethingChanged) {
var modal = $modal.open({
controller: function ($scope) {
$scope.okClass = 'btn-primary',
$scope.okLabel = resourceFactory.getResource('Labels', 'yes'),
$scope.cancelLabel = resourceFactory.getResource('Labels', 'cancel'),
$scope.title = resourceFactory.getResource('Labels', 'unsavedChanges'),
$scope.message = resourceFactory.getResource('Messages', 'unsavedChanges');
},
templateUrl: '/app/templates/modal'
});
modal.result.then(function() {
$scope.selections.somethingChanged = false;
});
}
return true;
}
Я постараюсь, чтобы добавить больше деталей. У меня есть функции LoadView() и New() в контроллере страницы индекса. В обеих этих функциях мне нужно сделать следующее:
if $ scope.selections.somethingChanged = false Мне нужно продолжить логику.
if $ scope.selections.somethingChanged = true Мне нужно выставить модальное диалоговое окно с вопросом, хочу ли я продолжить и отменить изменения или остаться на текущей странице. Если я отвечу «Да», я хочу продолжить логику.
Итак, это цель отдельной функции testNavigation. В тех языках, где каждый вызов функции последователен, это будет работать так, как я предполагал. Но это не работает в AngularJS/JavaScript, и я не уверен, как заставить его работать так, как мне нужно. Мы попробовали несколько идей с помощью сервиса $ q, но не получили результата.
Что такое код внутри 'testNavigation()'. Независимо от того, вам нужно будет использовать обещание (или обратный вызов). –
Вызовите 'testNavigation()', чтобы показать модальный, и иметь отдельный обработчик, Ok ". – tymeJV
Я добавил код для testNavigation. Можете ли вы показать мне, что мне нужно, чтобы изменить его, чтобы достичь моей цели? Еще раз спасибо – Naomi