所以我正在开发一个现有的MVC应用程序,几天前我们添加了一个角度模块。我们尝试用ajax加载它,但是角度拒绝加载,所以我们决定在索引上添加角度路径和ng-view。问题是只有角度路线正在工作,MVC路线已经死亡。我是否需要将它们逐个添加到class Customer(object):
def __init__(self, stringWithInfo):
self.name = re.search("'name': (.+?)',",stringWithInfo).group(1)
self.email = re.search("'email': (.+?)',",stringWithInfo).group(1)
self.number = re.search("'number': '(.+?)',",stringWithInfo).group(1)
def getName(self, name):
return self.name
def getEmail(self, email):
return self.email
def getNumber(self, number):
return self.number
,这会导致大量不必要的工作?我们也尝试使用2进行测试,当c#控制器返回$routeProvider
时,它不会在特定的ng-view div中加载,只需将partial加载为整页。
这是我的实际路线配置:
View()
我喜欢角度只是为了管理这条路线而所有其他路由MVC管理,这是可能的还是更好的方法?
答案 0 :(得分:0)
由于路线优先取决于订单,因此您必须明智地了解您的路线在您的MVC路线中的顺序。例如,它看起来像
/app/Facturacion/
是您希望Angular运行的地方。因此,在您的MVC路线中,添加为RouteConfig中的第一条路线
routes.MapRoute(
name: "ngRoute",
url: "app/Facturacion/{*angularRoute}",
defaults: new {controller = "Facturacion", action = "Index" }
);
所以现在,当你点击以app / Facturacion /开头的路线时,角度路线将接管。否则它将跳过并继续使用MVC路由。如果存在使用与angular(/ app / Facturacion /)相同路径的特定MVC路由,请将其添加到RouteConfig中的ngRoute上方,这将继续运行MVC而不是角度。
routes.MapRoute(
name: "myMvcRoute",
url: "app/Facturacion/someRoute",
defaults: new {controller = "Facturacion", action = "SomeAction" }
);
确保在FacturacionController中,Index操作返回View,并在View中添加角度脚本和角度代码。示例视图类似于
@{
ViewBag.Title = "Facturacion";
}
@section head{
<base href="/"> //Add a head section in your layout (make it optional)
}
@section scripts{
@Scripts.Render("~/bundles/angularjs")
@Scripts.Render("~/bundles/facturacionSPA")
}
<div ng-app="facturacionApp">
<div ng-view></div>
</div>
你的Angular路线看起来像
$routeProvider.when('/app/Facturacion/MantenimientoFacturas', {
templateUrl: '/Facturacion/MantenimientoFacturas',
controller: 'FacturasController'
}).when('/app/Facturacion/MantenimientoOrdenes', {
templateUrl: '/Facturacion/MantenimientoOrdenes',
controller: 'OrderController'
}).otherwise({
redirectTo: '/ServiceDesk/starter',
});
此外,角度模板应该是常规的html文件,而不是部分视图。最好坚持棱角分明的棱角分明的东西和MVC的mvc东西,不要在我看来混合它们!
编辑: 如果&#39; / ServiceDesk / starter&#39;是一个mvc路线,你不希望角度路由到它,你可以在角度控制器中做这样的事情:
if ($location.url().indexOf('/ServiceDesk/starter') >= 0 && supports_history_api()) $window.location.href = '/ServiceDesk/starter';
support_history_api()代码的完整性,这决定了我是否使用html5模式为$ locationProvider,因为我需要旧IE工作
function supports_history_api() {
return !!(window.history && history.pushState);
}