Как отладить что меняет текстовое поле текста при изменении маршрута? - PullRequest
0 голосов
/ 08 февраля 2020

Как отладить, что меняет текст в текстовом поле в angularjs?

У меня ошибка. Я нахожусь на странице 1, которая имеет поле электронной почты. Я меняю адрес электронной почты в этом поле и нажимаю ссылку на go на другую страницу (изменения маршрута). Затем я go возвращаюсь на первую страницу и вижу, что внесенного мною изменения в поле электронной почты нет - оно показывает старую электронную почту.

if(typeof policyReference.user.email !== 'undefined') {
    $scope.allData.user.email = policyReference.user.email;

    // for vopins when agent buys:
    // this is for setting email on page refresh. But it makes set it also when going step back. So commented.
    // Need to find how to make it set on page load and not set on going back.

    $scope.allData.policy_holder['checkout[policy_holder][email]'] = policyReference.user.email;
    console.log('this is not called on route change');
    handlePaymentProfiles(policyReference.user.email);

    if (partialAccountSetup) {
        $scope.allData.account_setup['checkout[account_setup][signup][email][first]'] = policyReference.user.email;
        $scope.allData.account_setup['checkout[account_setup][signup][email][second]'] = policyReference.user.email;
    }
}

Я обнаружил, какая строка вызывает ошибку, но я не понимаю, почему она вызывает ошибку. Строка такая:

$scope.allData.policy_holder['checkout[policy_holder][email]'] = policyReference.user.email;

Я не могу удалить эту строку, потому что она мне нужна, чтобы электронная почта была установлена ​​при любой загрузке приложения.

Я пытался добавить logi c что-то вроде - если это загрузка страницы, то запустите эту строку. В противном случае нет. Но похоже, что эта строка выполняется только при загрузке страницы. Но как-то вызывает ошибку при изменении маршрута.

Мне нужны идеи, где искать. Как определить, какой код меняет поле ввода текста? Я пытался отладить с помощью отладчика chrome, но я не вижу, чтобы строка изменялась в нашем коде, но в коде angularjs такое ощущение, что его очень сложно отладить.

Обновление:

Я создал небольшой скрипт, который отображает изменение сброса при просмотре.

'use strict';

angular.module('myApp.view1', ['ngRoute'])

.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/view1', {
    templateUrl: 'view1/view1.html',
    controller: 'View1Ctrl'
  });
}])

.controller('View1Ctrl', ['$scope', function($scope) {
  $scope.email  = 'a'; 
}]);

И я попытался установить точку останова на $ scope.email = ' а ';

и при загрузке и каждый раз, когда я go к / view1 маршруту, он останавливается на точке останова, что имеет смысл и является отлаживаемым.

Но в моем реальном приложении - он не останавливается на изменение маршрута на линии, которое вызывает проблему:

$scope.allData.policy_holder['checkout[policy_holder][email]'] = policyReference.user.email;

Почему это может быть?

Я также добавил к своему реальному проекту код

this.$onInit = function() {
        console.log("View controller initialization");
        //Restore data here
        //...
    };

    this.$onDestroy = function() {
        console.log("View controller teardown");
        //Save data here
        //...
    };

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

1 Ответ

1 голос
/ 08 февраля 2020

Имейте в виду, что изменения маршрута уничтожают как контроллер, так и область видимости. Данные, которые должны сохраняться между изменениями маршрута, должны храниться в службе.

Один из подходов к решению проблемы уничтожения контроллера заключается в добавлении кода разрыва в $onDestroy ловушку жизненного цикла:

app.controller("viewController", function() {
    this.$onDestroy = function() {
        console.log("View controller teardown");
        //Save data here
        //...
    };
    this.$onInit = function() {
        console.log("View controller initialization");
        //Restore data here
        //...
    };
})

Для получения дополнительной информации см.


служением, что вы имеете в виду?

app.service("viewdata", function() {
    var email;
    this.setEmail = function(val) {
        this.email = val;
    };
    this.getEmail = function() {
        return email;
    });
})

Сервисы - это синглтоны, которые работают в течение всего срока службы приложения.

Для получения дополнительной информации см.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...