#angularjs #angular-ui-router
#angularjs #angular-ui-router
Вопрос:
Когда я отправляю форму для сохранения профиля пользователя, я хочу показать пользователю предупреждающее сообщение, чтобы показать, была ли запись успешно сохранена или нет. У меня есть 3 вкладки начальной загрузки, и форма, которую я хочу сохранить, находится на активной вкладке.
Я считаю, что предупреждение не отображается, потому $state
что требуется перезагрузка. Я не уверен, как это сделать. Если бы эта страница была отдельным маршрутом, я, вероятно, мог бы сделать $state.reload()
или что-то подобное. Я могу перейти на другую вкладку и обратно, и появится предупреждение.
Я пробовал: $state.transitionTo('myprofile', null, {reload: true, notify:true});
с этим не повезло.
HTML, отображающий предупреждение:
<div ng-if="profilesaved == 'saved'" class="alert alert-success fade in">
<a href="#" class="close" data-dismiss="alert" aria-label="close">amp;times;</a>
<strong>Success!</strong> Your profile has been saved
</div>
Соответствующее состояние:
.state('myprofile', {
url: '/my-profile',
templateUrl: 'pages/my-profile.html',
controller: 'MyProfileController as myprofile',
resolve: {
// controller will not be loaded until $requireSignIn resolves
"firebaseUser": ["$firebaseAuthService", function($firebaseAuthService) {
// If the promise is rejected, it will throw a $stateChangeError
return $firebaseAuthService.$requireSignIn();
}]
}
})
Функция, которая устанавливает запись в БД.
$scope.submit = function() {
var record = firebase.database().ref().child('myprofile/' firebase.auth().currentUser.uid)
.set({
name: $scope.profile.name,
address: $scope.profile.address
}
)
.then(function(data) {
console.log('profile saved');
$scope.profilesaved = "saved";
})
.catch(function(error) {
console.log('profile save failed');
$scope.profilesaved = "save-failed";
});
};
Ответ №1:
Не уверен, что это лучший способ решить эту проблему, но это сделало свое дело:
.then(function(data) {
console.log('profile saved');
$scope.profilesaved = "saved";
$scope.$apply();
$timeout(function(){$state.reload();}, 4000);
})