2015-08-15 2 views
1

У меня есть несколько форм, которые взаимодействуют с базовым сервисом для сохранения данных.Как отправить данные угловой формы, которые изменились?

Мне интересно, существует ли стандартный угловой способ определения того, какие свойства модели имеет, и отправили их только в ПОЧТУ? В настоящее время все отправляется, когда не изменяется.

+0

угловой не имеет ничего строить в, за то, что вы просите – harishr

+0

Я предполагаю, что ваши формы чрезвычайно велики, и есть причина того, что отправка всех данных не является опциональной.В этом случае вам придется написать свою собственную логику, чтобы определить, что изменилось, и отправлять только измененные данные в ваш POST. –

+0

. У вас должен быть конечный объект для отправки, скажем, '$ scope.final_data' и в ваших формах вы должны использовать некоторые директивы, такие как 'ng-change', и всякий раз, когда вы меняли модель, добавьте ее в' final_data'. –

ответ

3

В зависимости от вопроса, могут быть две ситуации.

  1. После того как пользователь заполнил поля и нажал кнопку SAVE, которая, наконец, отправит запрос PATCH для сохранения // обновления значений.

  2. Поскольку пользователь меняет значения, необходимо выполнить запрос.

Для 1.

Вы можете сохранить трек из того, что переодеться, поддерживая HashMap. Используйте директиву ng-modal для всех полей ввода пользователя. Предположим, что есть два поля ввода i. username и password.

<input type="text" ng-modal="username" /> 
<input type="password" ng-modal="password" /> 

В контроллере

$scope.userInfo = { 
    user: $scope.username, 
    pass: $scope.password 
}; 

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

Итак, теперь вы можете сравнить старые и новые значения и соответственно отправить желаемые.

Для 2.

Использование Угловая-х watchCollection.

scope.$watchCollection('[username, password]', function() { 
    // send a request 
}); 

EDIT

Можно использовать метод дребезга для второго подхода

// Returns a function, that, as long as it continues to be invoked, will not 
// be triggered. The function will be called after it stops being called for 
// N milliseconds. If `immediate` is passed, trigger the function on the 
// leading edge, instead of the trailing. 
_.debounce = function(func, wait, immediate) { 
    var timeout, args, context, timestamp, result; 

    var later = function() { 
    var last = _.now() - timestamp; 

    if (last < wait && last >= 0) { 
     timeout = setTimeout(later, wait - last); 
    } else { 
     timeout = null; 
     if (!immediate) { 
     result = func.apply(context, args); 
     if (!timeout) context = args = null; 
     } 
    } 
    }; 

    return function() { 
    context = this; 
    args = arguments; 
    timestamp = _.now(); 
    var callNow = immediate && !timeout; 
    if (!timeout) timeout = setTimeout(later, wait); 
    if (callNow) { 
     result = func.apply(context, args); 
     context = args = null; 
    } 

    return result; 
    }; 
}; 

Источник: https://github.com/jashkenas/underscore/blob/master/underscore.js

1

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

http://plnkr.co/edit/8Og1m8eM54eOzKMDJtfJ?p=preview

.controller('ExampleController', ['$scope', function($scope) { 
    $scope.user = {} 
    var formFields = ['firstName', 'lastName']; 

    $scope.update = function(form, user) { 
    $scope.updatedFields = {}; 
    angular.forEach(formFields, function(field) { 
     if (form[field].$dirty) { 
     $scope.updatedFields[field] = $scope.user[field]; 
     //Temporarily set the field back to pristine. 
     //This is only for demo 
     form[field].$dirty = false; 
     } 
    }); 
    }; 
}]); 

Вы можете использовать ту же строку для ввода имени и модели.

<input type="text" ng-model="user.firstName" name="firstName"/> 
Смежные вопросы