2016-11-15 6 views
0

У меня есть две проблемы. Первый: Я попробовал код jQuery и угловой код службы для того же самого. Чтобы очистить поля ввода из пустых пространств динамически.Угловая перезагрузка при изменении состояния или jQuery для всех состояний (ui.router lib)

$('input[type="text"]').change(function() { 
    if (!this.value.replace(/\s/g, '').length) { 
     this.value = ""; 
    } 
}); 

или

angular.module('app').service('nospace', function() { 
$('input[type="text"]').change(function() { 
    if (!this.value.replace(/\s/g, '').length) { 
     this.value = ""; 
    } 
}); 

});

Когда я пытаюсь использовать jQuery глобально для всех угловых страниц, не работает. Когда я пытаюсь использовать .service работает, но когда я меняю состояние, перестает работать, пока я не обновляю страницу. Я пытаюсь добавить к $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {}); и вызвать службу оттуда, когда состояние изменено, чтобы исправить эту проблему, но все равно не работайте должным образом. Я добавил к этому контроллеру angular.module('app').controller('channelAoiEditor', function (..,.., nospace) { ... some code ... }

Вторая проблема заключается в разборе URL-адреса. У меня есть такое состояние:

.state('edit', { 
     url: '/EditCustomer/:id', 
     templateUrl: 'Client/app/customers/editCustomer/editCustomer.html', 
     controller: 'editCustomer' 
}) 

Когда я нахожусь в странице «Изменить клиента» и попытаться изменить пользователя непосредственно из URL. Перезагрузка страницы, но сохраняет последнего использованного пользователя вместо перезагрузки нового пользователя, но URL-адрес такой же, как новый. Стараюсь с изменением состояния с:

url: '/EditCustomer/{id}' 
or 
url: '/EditCustomer/{id:[a-zA-Z0-9/.]*}' 

На $rootScope.$on('$locationChangeSuccess', function (event, url, oldUrl, state, oldState) {..} я получаю изменения, но, как разобрать его правильно, чтобы изменить содержание.

Спасибо!

ответ

1

Возможно, вам понадобится $ scope. $ Apply() и (или) $ scope. $ Digest() для перезагрузки страницы ... бывает, что код jQuery и Javascript пошатнулся, чтобы «перекрасить», страница, которую вы должны:

$ применять и $ переваривать

Это шаг, который проверяет, есть ли какие-либо обязательные ценности изменились на самом деле имеет> метод, $ объем $ дайджеста().. На самом деле там происходит волшебство, но мы> почти никогда не вызываем его напрямую, вместо этого мы используем $ scope. $ Apply(), который будет вызывать> $ scope. $ Digest() для вас.

, так что я бы инкапсулировать код, как это:

$scope.$apply(function(){ 
    $('input[type="text"]').change(function() { 
    if (!this.value.replace(/\s/g, '').length) { 
    this.value = ""; 
    } 
}); 

Таким образом, вы убедитесь, что вы подаете и обновление значений.

Существует некоторая документация здесь http://jimhoskins.com/2012/12/17/angularjs-and-apply.html

Увидимся :)

+0

Это не работает извините –

0

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

$(document).on('change', 'input[type="text"]', AddVerification) 

и

$('input[type="text"]').change(AddVerification); 

Вот как я его исправлю

function AddVerification() { 
    if (!this.value.replace(/\s/g, '').length) { 
     this.value = ""; 
    } 
} 
angular.modul('app',[....]) 
.service('nospace', function() { 
    //jQuery trim input fields 
    this.clearWhiteSpaces = function myfunction() { 
     $(document).off("change", 'input[type="text"]', AddVerification) 
        .on('change', 'input[type="text"]', AddVerification); 
    } 
}).run(
    ['$rootScope', '$state', '$stateParams','nospace', 
     function ($rootScope, $state, $stateParams,nospace) { 

    $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) { 
      nospace.clearWhiteSpaces(); 
    }); 
}) 

и для контроллера:

angular.module('app').controller('channelAoiEditor', function ($scope, datastore, $cookieStore, modalWindow, nospace) { 

Осталась проблема с переходом должным образом URL в $ stateProvider.state