Ответ 1
В Angular
отсутствует директива ng-action,<form action="{{'/users/' + user.id }}">
Вам нужно добавить выше тег для работы
Я хочу иметь атрибут динамического действия в форме. У меня есть код
<form ng-action="/users/{{user.id}}">
</form>
Angular заменяет {{user.id}}
на фактическое значение, но не добавляет атрибут action
с новым значением. Как это исправить?
Я также пробовал с помощью
<form action="/users/{{user.id}}"></form>
Он работает в Angular 1.2.1
, но не в более высокой версии (>1.2.1)
1.2.1
, http://jsfiddle.net/fizerkhan/s8uCT/5/1.2.2
, http://jsfiddle.net/fizerkhan/s8uCT/6/Я также пробовал с Angular версией 1.2.4
, 1.2.6
, он не работает.
В Angular
отсутствует директива ng-action,<form action="{{'/users/' + user.id }}">
Вам нужно добавить выше тег для работы
Для Angular 1.2+ вам нужно доверять URL с помощью SCE.
В контроллере добавьте зависимость от $sce
. Затем определите URL-адрес ниже
$scope.formUrl = $sce.trustAsResourceUrl('/users/' + user.id);
Тогда в представлении
<form action="{{formUrl}}" method="POST">
Начиная с версии 1.2, Angular поставляется с включенным по умолчанию Strict Contextual Escaping (SCE).
Вы можете использовать jQuery для изменения атрибута действия в следующем примере:
$('#formId').attr('action', '/users/'+$scope.user.id);
Вот мое решение, использующее директивы 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>