如何在 AngularJS SPA 中提供索引后立即有条件地重定向.html?



我们有一个站点,当您点击根目录时 Asp.net MVC提供索引.html文件,然后将AngularJS 1.2.4用作单页应用程序。我需要为 SPA 提供服务,但想立即重定向到路线。基本上,用户将单击电子邮件中的链接,我需要将他们发送到该路由。

服务索引.html方式如下:

[AllowAnonymous]
public ActionResult Index()
{
CachingUtility.SetNoCache(Response);
var path = "index.html";
if (Convert.ToBoolean(ConfigurationManager.AppSettings["UseDist"]))
{
path = "dist/index.html";
}
return File(path, "text/html");
}

从这里开始,AngularJS$routeProvider接管:

...
.config(['$routeProvider', function ($routeProvider) {
$routeProvider.otherwise({ redirectTo: '/home' });
}])
...
.config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/products', {
templateUrl: '/application/app/product/products.html',
controller: 'ProductsCtrl'
});
... etc,

是否有其他方法可以提供索引.html,或者我可以对路由器执行某些操作来实现此目的?我试图避免为这几条路线提供全新的 SPA。

如果我理解正确的话,您正在从应用程序外部访问您的页面。

为了实现这一点,我建议您使用ui路由器。此外,我还没有开发过任何不使用帮助您路由的库的强大应用程序。

为什么值得使用它?

根据为什么你应该使用UI-Router部分中的以下帖子,有时您的视图上有多个部分,例如,当您有页脚,页眉,侧边栏等内容可变时,因此这个强大的库非常有用。因此,通过使用它,您必须按以下方式设置状态提供程序:

$stateProvider
.state('contacts', {
url: "/contacts",
templateUrl: 'contacts.html'
})

所以你唯一需要的是:myurl/联系人或任何你想要的东西,从邮件上的超链接传递。

如果你想要更强大的东西(传递url参数(,我所做的是设置路由以及路由在来自外部时应该实现的语言。实现将如下所示:

.state('signup', {
url: 'myUrl + '/signup?lang',
params: {
lang: null
},
templateUrl: 'templates/signup.html',
controller: 'signupCtrl'
})

如果您注意,我会在 url 的末尾添加我正在传递的参数,但默认情况下它是 null,但这仅在您传递参数时才是必需的(您只需要类似于第一个片段的东西(之后,您需要从控制器内部获取参数,然后以您想要的任何方式使用它们。

$stateProvider.state('contacts.detail', 
{ url: '/contacts/:contactId',   
controller: function($stateParams){
$stateParams.contactId  //*** Exists! ***//
},

所以,总而言之,如果您决定使用 ui-router 并且它回答了您的问题

有没有其他方法可以提供索引.html,或者我的东西 可以用路由器来做到这一点吗?

  1. 添加 UI 路由器库
  2. 设置路由.js文件
  3. 设置状态提供程序
  4. 将正确的 URL 传递给电子邮件上的超链接。

不要对我的解释走得太远,如果你觉得你的应用程序不会太强大,请在没有 ui-router 库的情况下尝试一下。

最新更新