0

Я пытался придумать какую-то« проверку ошибок/проверку »для моих пользователей, если они забудут чтобы сохранить изменения, которые они сделали в своих профилях.Если пользователь «вставляет» входные данные формы в профиль и забывает сохранить: покажите `POP UP`, когда они нажимают значок SideMenu

  1. Пользователь вводит Profile.html state. Они начинают обновлять некоторые из своих данных (например, имя, номер телефона и т. Д.). ВМЕСТО нажмите кнопку SAVE CHANGES, чтобы перейти от состояния профиля, щелкнув значок SideMenu в левом верхнем углу экрана своего мобильного устройства.

  2. Поскольку форма технически сейчас считается «$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); 

Angular docs on $watch

Возможно, мне нужно сделать завод или услугу для этого сейчас, когда я думаю об этом, но в то время, когда я использовал $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'); 
      } 
     }); 
     } 
    }; 

Это в основном суть моего кода. Он фактически «работает», но я определил шаблон, и здесь мне нужна ваша помощь, чтобы предложить либо другой метод, чтобы выполнить это, либо, возможно, некоторые рекомендации по рефакторингу для этого текущего кода.

  1. Всплывающее делает шоу, когда пользователь нажимает на кнопку Side меню, но я не думаю, что это действительно имеет значение, если форма $ загрязнен или нет ..

большая проблема заключается в том, что всплывающее окно начинает отображаться независимо от того, пытаетесь ли вы оставить представление profile.html или любое другое представление в этом отношении.

Когда я написал этот код, у меня создалось впечатление, что функции Pop up и toggleLeftSideMenu будут ТОЛЬКО работать в представлении «Профиль», так как я «смотрю» объект updateDriverProfileInfo, и я также создал эту глобальную переменную для использования между контроллером меню и Контроллер профиля.

ответ

0

вам нужно иметь хорошее представление о жизненном цикле ионного, попробуйте с любым из перечисленных ниже событий

$scope.$on('$ionicView.leave', function(){ 
    // Anything you can think of 
}); 

$scope.$on('$ionicView.beforeLeave', function(){ 
    // Anything you can think of 
}); 

$scope.$on('$ionicView.unloaded', function(){ 
    // Anything you can think of 
}); 

найти более подробную информацию здесь http://www.gajotres.net/understanding-ionic-view-lifecycle/