Ng-action не добавляет атрибут действия в форму

Я хочу иметь атрибут динамического действия в форме. У меня есть код

 <form ng-action="/users/{{user.id}}">
 </form>

Angular заменяет {{user.id}} на фактическое значение, но не добавляет атрибут action с новым значением. Как это исправить?

Я также пробовал с помощью

<form action="/users/{{user.id}}"></form>

Он работает в Angular 1.2.1, но не в более высокой версии (>1.2.1)

Я также пробовал с Angular версией 1.2.4, 1.2.6, он не работает.

Ответы

Ответ 1

В Angular

отсутствует директива ng-action,

отсылайте Angular DOCS

<form action="{{'/users/' + user.id }}">

Вам нужно добавить выше тег для работы

Ответ 2

Для Angular 1.2+ вам нужно доверять URL с помощью SCE.

В контроллере добавьте зависимость от $sce. Затем определите URL-адрес ниже

$scope.formUrl = $sce.trustAsResourceUrl('/users/' + user.id);

Тогда в представлении

<form action="{{formUrl}}" method="POST">

Ответ 3

Начиная с версии 1.2, Angular поставляется с включенным по умолчанию Strict Contextual Escaping (SCE).

См. https://docs.angularjs.org/api/ng/service/ $sce

Ответ 4

Вы можете использовать jQuery для изменения атрибута действия в следующем примере:

$('#formId').attr('action', '/users/'+$scope.user.id);

Ответ 5

Вот мое решение, использующее директивы Angular:

JS:

app.controller('formCtrl', ['$scope', function($scope) {
    $scope.customAction = 'http://stackoverflow.com/';
}])
.directive('dynamicFormAction', function() {
    return {
        restrict: 'A',
        scope: {
            'dynamicFormAction': '='
        },
        link: function(scope, el, attrs) {
            scope.$watch('dynamicFormAction', function (action) {
                el[0].action = action;
            });
        }
    };
});

HTML:

<form action="" method="POST" dynamic-form-action="customAction">
     ...
</form>