是否可以让角度处理一些路线和mvc其他?

时间:2016-11-22 18:06:08

标签: c# angularjs asp.net-mvc routes ngroute

所以我正在开发一个现有的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管理,这是可能的还是更好的方法?

1 个答案:

答案 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);
}