Angularjs и значения «value» инпутов

Привет. Реализую оплату через сервис paysto.com, и ситуция следующая:

Оплата впринципе реализована как и во многих сервисах, нужно просто отправить форму на определенный url, с определенными параметрами. Например:

<form accept-charset='UTF-8' method='POST' action='https://paysto.com/ru/pay/AuthorizeNet' style="display: none">
    <input type="hidden" name="x_description" value="Покупка мечты" />
    <input type="hidden" name="x_login" ng-model="newPayment.shopId" />
    <input type="hidden" name="x_amount" ng-model="newPayment.amount" />
    ...
</form>


После того как юзер нажимает на кнопку "оплатить", вызывается функция, в которой:

Payment.reservePayment(function(response) {
     $scope.newPayment = response;
});


Параметры для платежного шлюза возвращаются от сервера (paymentId, hash и т.д.), и записываются в переменную, которая биндится на форму. Проблема заключается вот в чем:
ng-model не ставит нативный атрибут value к полю input, и после того как форма сабмитится, отправляются пустые параметры. Это можно увидеть, сделав:
$('#myForm').serialize();

> x_login=&x_amount=&x_currency_code=RUB&x_fp_sequence=&x_fp_timestamp=&x_fp_hash=&x_invoice_num=


Подскажите пожалуйста - как быть, как заставить форму отправиться так как нужно ?

UPD: Решено, проблема была в моей невнимательности :-)
  • Вопрос задан
  • 6216 просмотров
Решения вопроса 1
itspers
@itspers
Это именно из-за hidden.
Тут или биндить значение в value, как value="{{newPayment.shopId}}"
Или просто сделать type="text" и спрятать в кссе, но первый вариант правильный. Ng-model нужно для биндинга в две стороны - а если инпут hidden - он работает только в одну сторону. Соответственно и ng-model ему не нужен.

Вот: https://github.com/angular/angular.js/pull/2574
Why ng-model as you dont need two way data-binding? if you set value="{{ myModel }}" it works nicely
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
doodoo
@doodoo Автор вопроса
@itspers Странно, ни value="{{ newPayment.shopId }}", ни ng-value="newPayment.shopId" не сработало..

Payment.reservePayment(function(response) {
     $scope.newPayment = response;
});


Payment - это сервис модуля, так что всё выполняется в контекте angular, и $apply точно не нужен..
Сейчас попробую второй, предложенный вами вариант
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы