[英]Binding from mvc model to angular2 component (Components in mvc project)
我可以使用一些帮助,弄清楚如何将模型数据从mvc应用程序传递到在mvc中运行的angular2组件。
可以说我有一个包含组件的cs.html文件
<my-app></my-app>
这将加载angular2分量。 我需要生成一些绑定以使mvc模型与我的angular2模型保持完整。
首先,我试图通过Input属性将模型传递给组件。
CSHTML文件:
在我的cshtml文件的顶部,我有:
@model MainModel
<script>
var model = @Html.Json(Model.Form.PassengerModel);
</script>
我想将此模型传递给我的angular2组件。 我尝试过的是:
<my-app passengerModel="model"></my-app>
Angular2组件:
import { Component, Input } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './Content/Scripts/angular2components/app.component.html',
})
export class AppComponent {
@Input() passengerModel: PassengerModel;
constructor() {
console.log("Model loaded?: " + this.passengerModel);
}
}
export class PassengerModel {
constructor(
public Adults: number,
public Children: number
) { }
}
问题在于该模型始终是未定义的。 有什么方法可以将模型传递给组件?
上面概述的问题是,对于您尝试在其中使用上下文的绑定不正确。
<my-app passengerModel="model"></my-app>
上一行告诉Angular将my-app组件内的passengerModel绑定到名为model的主机组件上的属性。 这意味着承载my-app组件的页面(组件)应该是具有名为model的属性的组件。 您创建的全局变量不在主机组件的范围内。 Angular2专门隔离了每个组件的范围,因此您不会意外引入有害的副作用。
避免痛苦和痛苦,完全拥抱Angular。 抛弃您的MVC页面控制器并转到WebApi服务调用将产生更好的结果,并且省去了手动转换模型的麻烦,因为您会遇到其他问题。
注意事项:
[HttpGet]
[AcceptVerbs["GET"]
[Route("passengers/{id:int}")]
public IHttpActionResult GetPassenger(int id)
{
// For illistration...
try
{
var passengerModel = PassengerService.LoadPassenger(id);
return Ok(passenger);
}
catch(Exception e)
{
return InternalServerError(e);
}
}
https://angular.io/docs/ts/latest/tutorial/toh-pt6.html
// I would normally put this in the environemnt class..
private passengerUrl = 'api/passengers'; // URL to web api
constructor(private http: Http) { }
getPassenger(id: number): Promise<Passenger> {
return this.http.get(`this.passengerUrl/${id}`)
.toPromise()
.then(response => response.json() as Passenger)
.catch(this.handleError);
}
private handleError(error: any): Promise<any> {
console.error('An error occurred', error); // for demo purposes only
return Promise.reject(error.message || error);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.