现在,即使中的action =,提交也已被angular2捕获。
演示链接:http://plnkr.co/edit/4wpTwN0iCPeublhNumT5?p=preview
//our root app component
import {Component} from 'angular2/core'
@Component({
selector: 'my-app',
providers: [],
template: `
<div>
<h2>Hello {{name}}</h2>
<form action="https://www.google.com" target="_blank" method="POST">
<input name="q" value="test">
<button type="submit">Search</button>
</form>
</div>
`,
directives: []
})
export class App {
constructor() {
this.name = 'Angular2'
}
}
最佳答案
您应该利用NgSubmit
指令,如下所述:
<form (ngSubmit)="onSubmit()" #heroForm="ngForm">
(...)
<input type="text" [(ngModel)]="data.name"/>
(...)
<button type="submit">Send</button>
</form>
在这种情况下,当您单击Submit按钮时,将调用组件的
onSubmit
方法,并且您将能够使用Angular2上的HTTP
类将数据手动发送到服务器:@Component({
})
export class MyComponent {
constructor(private http:Http) {
this.data = {
name: 'some name'
(...)
};
}
onSubmit() {
this.http.post('http://someurl', JSON.stringify(this.data))
.subscribe(...);
}
}
这样,您可以保留在同一页面中。
编辑
在发表评论之后,您需要禁用捕获
NgForm
事件并阻止其传播的submit
指令的行为。看到这一行:https://github.com/angular/angular/blob/master/modules/%40angular/forms/src/directives/ng_form.ts#L141。为此,只需将
ngNoForm
属性添加到表单中:<form ngNoForm action="https://www.google.com" target="_blank" method="POST">
<input name="q" value="test">
<button type="submit">Search</button>
</form>
在这种情况下,将打开一个新窗口供您提交表单。
希望对您有帮助,
蒂埃里
关于angular - 如何在Angular2中向服务器提交表单?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34835516/