【发布时间】:2017-04-21 06:09:30
【问题描述】:
在我的应用程序中,我试图将 mvc 控制器参数传递给角度控制器。因为我想从另一个 api 获取数据。
MVC 控制器
public ActionResult Hotel(long hotelCode, string Destination)
{ return View(model); }
在视图中,我将模型传递给脚本。所以我可以获取角度参数。
查看
<script type="text/javascript">
var data = @Html.Raw(Json.Encode(Model));</script>
AngulerJS 控制器
app.controller('ctrl', function ($scope, $q, $window, studentService, filterFilter) {
$scope.datax = $window.data;
$scope.saveSubs = function () {
var sub = {
Des: $scope.datax.HotelCode,
DepartureDate: $scope.datax.Des
};
var saveSubs = APIService.hotelavailability(sub);
saveSubs.then(function (d) {
console.log("Succss");
$scope.respData = d.data.hotels;
}, function (error) {
console.log('Oops! Something went wrong while saving the data.');
alert("Oops! Something went wrong while saving the data.");
});
};
});
他们有什么方法可以在不将参数传递给角度控制器的情况下调用 api 并将数据绑定到视图?
【问题讨论】:
-
您是否尝试过使用
ng-init将您的数据设置或初始化到ng 控制器 -
我认为这是一种错误的做法,原因有很多:1)您应该尽量将前端应用程序与后端应用程序分开,这样可以防止两者之间发生冲突前端和后端团队,并根据接口和完全不同的堆栈进行单独管理,从而提高工作效率; 2)不要尝试将数据作为全局变量传递,会污染全局范围,意义不大; 3)与(1)相关,您可以使用任务运行器或捆绑器在初始化数据的脚本之间切换,可以创建角度常量或将 HTML 添加到 $templateCache 中; ...继续
-
4) 如果您需要来自服务器的数据,您不妨创建一个 $http 调用或使用指向正确方向的模板 url; 5)尝试将您的 HTML 保存在您的角度模板中,而不是从服务器端代码生成 HTML,然后从服务器获取必要的数据并将其绑定到您的模板,这将允许在 $templateCache 中缓存您的模板,但您也可以使用将 HTML 捆绑到 JS 代码中以缓存它们并防止多次调用的插件; 6) 不要调用你的控制器
ctrl并将你的代码拆分到多个模块、组件、指令、过滤器…… -
实际上我想从hotelbeds api获取数据并绑定到视图。但参数在另一个视图中。这就是问题所在。
标签: javascript angularjs asp.net-mvc asp.net-mvc-4