0

我正在尝试在已经存在的 MVC 3 站点中使用 Angular。我已经让我的主要 ngApp 使用第一个加载的项目,但是一旦我添加一个模块并尝试实现$routeParams它,路由提供程序似乎开始崩溃。在我的 MVC 3 应用程序中,我有一个/Article/ReadArticle/key允许 key 为 null 的有效路由路由,并且我有一个相应的控制器/操作来传递请求的文章。如果key为 null 或为空,则提供最新输入的文章。我有另一个发布操作,它做同样的事情,只是它返回一个JsonResult而不是一个视图。

我修改了我的视图以排除任何 MVC 构造的模型,因此该操作仅返回本质上是一个包含所有角度模板的 html 页面。角度控制器调用 JsonResult 的 post 操作,一切都很顺利。我根据示例在角度模块中添加了路由,但由于某种原因,它似乎没有捕捉到路由:

'use strict';

/* App Module */

angular.module('je', []).
  config(['$routeProvider', function ($routeProvider) {
      $routeProvider.
      when('/Article/ReadArticle/:key', { templateUrl: '/Angular/ArticleView.html', controller: ArticleCtrl }) //.
      //otherwise({ templateUrl: '/Angular/ArticleView.html', controller: ArticleCtrl });
  } ]);

我评论了这个otherwise电话。如果我把它留在那里,它会起作用,但只会带来默认文章。手动输入一个有效的路线如/Article/ReadArticle/Some_Valid_Key不会产生任何合适$routeParams的。注释掉,似乎没有匹配的路线,因此没有加载模板并且页面是空白的。

function ArticleCtrl($scope, $routeParams, $http) {
    console.log($routeParams.key);
    $http.post("/Article/GetArticleText", { "textkey": $routeParams.key }).success(function (data) {
        console.log(data);
        $scope.article = data;
    }).
    error(function (data, status) {
        console.log(data);
        console.log("Request failed");
        console.log(status);
    });
} 

根据样本,我的期望是此时$routeParams.key应该填充Some_Valid_Key。显然,我的期望与现实不符,但我缺少什么来获得表现的路线?

4

1 回答 1

0

AngularJS 路由是在 URL 的哈希之后定义的。因此,在您的基本 URL 所在的场景中,/Article/ReadArticle/key当前没有定义路由。这就是为什么要遵循您的默认路线(在注释掉该otherwise行之前)。为了让 AngularJS 遵循您定义的路线,您的 URL 必须如下所示http://mysite.com/someurl/#/Article/ReadArticle/Some_Valid_Key

于 2013-03-12T18:52:57.610 回答