Я пытался придумать какую-то« проверку ошибок/проверку »для моих пользователей, если они забудут чтобы сохранить изменения, которые они сделали в своих профилях.Если пользователь «вставляет» входные данные формы в профиль и забывает сохранить: покажите `POP UP`, когда они нажимают значок SideMenu
Пользователь вводит Profile.html
state
. Они начинают обновлять некоторые из своих данных (например, имя, номер телефона и т. Д.). ВМЕСТО нажмите кнопку SAVE CHANGES, чтобы перейти от состояния профиля, щелкнув значок SideMenu в левом верхнем углу экрана своего мобильного устройства.Поскольку форма технически сейчас считается «
$dirty
». Я пытался использовать эту угловую собственность на первый, но я не мог получить результаты, которые я хотел, чтобы я попробовал счастья с$watch
..
ProfileController.js
$rootScope.isFormDirty = false;//global variable 'isFormDirty'->inject in controller.js (toggleLeftSideMenu())
$scope.$watch('updateDriverProfileInfo', function(newValue, oldValue) {//new & oldValue = ng-model when form is 1st 'viewed' is dirty
//http://tutorials.jenkov.com/angularjs/watch-digest-apply.html
if (newValue !== oldValue) {
// console.log("updatingg")
$rootScope.isFormDirty = true;
}
}, true);
Возможно, мне нужно сделать завод или услугу для этого сейчас, когда я думаю об этом, но в то время, когда я использовал $rootScope
, чтобы установить глобальную переменную isFormDirty
на этом контроллере и использовать его на общем контроллере, который поддерживает логику Side Menu в этом приложении Ionic.
controller.js(это где контроллер для SideMenu является)
$scope.sidemenuIsOpen = false;
$scope.toggleLeftSideMenu = function() {//ng-click from menu.html
$scope.sidemenuIsOpen = !$scope.sidemenuIsOpen;
if ($scope.sidemenuIsOpen && $rootScope.isFormDirty) {
var confirmPopup = $ionicPopup.confirm({
title: 'Changes were not saved',
template: 'Do you want to save your changes?',
});
confirmPopup.then(function(res) {
if (res) {
console.log('Run updateDriverProfile()');
} else {
console.log('Allow user to continue w/o changes');
}
});
}
};
Это в основном суть моего кода. Он фактически «работает», но я определил шаблон, и здесь мне нужна ваша помощь, чтобы предложить либо другой метод, чтобы выполнить это, либо, возможно, некоторые рекомендации по рефакторингу для этого текущего кода.
- Всплывающее делает шоу, когда пользователь нажимает на кнопку Side меню, но я не думаю, что это действительно имеет значение, если форма $ загрязнен или нет ..
большая проблема заключается в том, что всплывающее окно начинает отображаться независимо от того, пытаетесь ли вы оставить представление profile.html или любое другое представление в этом отношении.
Когда я написал этот код, у меня создалось впечатление, что функции Pop up и toggleLeftSideMenu
будут ТОЛЬКО работать в представлении «Профиль», так как я «смотрю» объект updateDriverProfileInfo
, и я также создал эту глобальную переменную для использования между контроллером меню и Контроллер профиля.