【发布时间】:2014-09-05 20:23:44
【问题描述】:
我有一个带有 .NET MVC/WebAPI 后端的 AngularJS 应用程序。我有一个 MVC 操作来提供加载我的 AngularJS 应用程序的主 HTML 页面。此 MVC 操作从 Web.config 和数据库加载多个应用程序设置,并将它们作为模型返回到视图。我正在寻找一种在我的 AngularJS .config 方法中将这些 MVC Model 值设置为 $provide.constant 值的好方法。
MVC 控制器方法:
public ActionResult Index() {
var model = new IndexViewModel {
Uri1 = GetUri1(),
Uri2 = GetUri2()
//...etc
};
return View(model);
}
我的 MVC _Layout.cshtml:
@model IndexViewModel
<!doctype html>
<html data-ng-app='myApp'>
<head>
@Styles.Render("~/content/css")
<script type='text/javascript'>
@if (Model != null) //May be null on error page
{
<text>
var modelExists = true;
var uri1 = '@Model.Uri1';
var uri2 = '@Model.Uri2';
</text>
}
else
{
<text>
var modelExists = false;
</text>
}
</script>
</head>
<body>
<!-- Body omitted -->
@Scripts.Render("~/bundles/angular", "~/bundles/app") //Loads angular library and my application
</body>
app.js:
"use strict";
angular.module('myApp', [])
.config(['$provide' '$window', function ($provide, $window) {
if ($window.modelExists){
$provide.constant('const_Uri1', $window.uri1);
$provide.constant('const_URi2', $window.uri2);
}
}]);
这是我的代码的一个大大简化的版本,但我认为它说明了我的担忧。有没有我忽略的更好或标准的方法来做到这一点?我不喜欢_Layout.cshtml 中的代码,因为我有更多的配置值。
【问题讨论】:
-
而不是单个变量,而是传递一个带有这些变量作为属性的对象。那么你所需要的只是你的应用程序中的对象引用
-
您的意思是将常量设置为具有属性的对象吗?据我所知,AngularJS $provide.constant 值不能有属性。
-
我的意思是
var appConfig={ modelExists:true, ur1: '@Model.Uri1'..}。常量也可以是一个对象,但由于全局命名空间,您也可以在任何地方访问该数据 -
我可能错了,常量可以是对象,但还有许多其他方法可以将我建议的配置对象传递给应用程序...
value,通过服务,创建提供程序等 -
对,我现在一直通过 $window.uri1 访问变量,但我不喜欢这样,因为它污染了窗口空间。我同意您将 appConfig 设为对象的建议肯定会使窗口更清洁,但我希望有更好的方法。
标签: c# asp.net-mvc angularjs asp.net-web-api