【问题标题】:Routing with angularjs in Mvc application在 Mvc 应用程序中使用 angularjs 进行路由
【发布时间】:2014-07-15 23:57:36
【问题描述】:

我一直在尝试使用 Mvc 4.0 项目在 Angularjs 中实现路由,但我无法做到。 我创建了一个空的 MVC 4.0 项目并添加了一个控制器“HomeController”。然后我在 Views 中添加了一个名为 Home 的文件夹,该文件夹具有三个视图。一个是当我们在路由配置中运行应用程序时打开的索引,我们有主控制器和索引操作的路由。所以,基本上假设索引页面是单页应用程序中的主页,我在索引页面中定义了一些代码,如 6oish预订enter link description here

索引。 CShtml

@{
    ViewBag.Title = "Index";
}
<style>
    .container {
        float: left;
        width: 100%;
    }
</style>
<script src="~/Scripts/angular.min.js"></script>

<h2>Practising Angular</h2>

    <a href="#/">List</a>
<a href="#/Edit">Edit</a>
<div ng-app="demoApp">
    <div class="container">
        <div ng-view=""></div>
    </div>
</div>


<script>
    var demoApp = angular.module('demoApp', []);

    demoApp.config(function ($routeProvider) {
        $routeProvider.when('/', { controller: 'SimpleController', templateUrl: 'Home/List' })
                      .when('/Edit', { controller: 'SimpleController', templateUrl: 'Home/Edit' })
                      .otherwise({ redirectTo: '/' });
    });

    demoApp.controller('SimpleController', function ($scope) {
        $scope.customers = [{ name: 'Dave jones', city: 'Phoenix' },
                            { name: 'Jhon Dena', city: 'Mexico' },
                            { name: 'Bradshaw', city: 'WashingTon' },
                            { name: 'Rey Mysterio', city: 'Brazil' },
                            { name: 'Randy', city: 'California' }, ];
    });

    $scope.addCustomer = function () {
        $scope.customers.push({ name: $scope.newCustomer.name, city: $scope.newCustomer.city })
    };
</script>

现在,我需要在上述路由中定义的另外两个视图,它们如下:

List.cshtml

@{
    ViewBag.Title = "List";
}

<h2>Listing the users in order </h2>

<div class="container">
    Name:&nbsp;<input type="text" ng-model="filter.name" />
    <ul>
        <li ng-repeat="objCust in customers | filter:filter.name">{{objCust.name }}-{{objCust.city}}
        </li>
    </ul>
    Customer Name:<br />
    <input type="text" ng-model="newCustomer.name" /><br />
    Customer city:<br />
    <input type="text" ng-model="newCustomer.city" /><br />
    <button ng-click="addcustomer()">Add customer</button>
</div>

最后一个是

编辑.cshtml

@{
    ViewBag.Title = "Edit";
}

<h2>Edit  the particular user. Things are under construction</h2>


<h2>Listing the users in order </h2>

<div class="container">
    Name:&nbsp;<input type="text" ng-model="city" />
    <ul>
        <li ng-repeat="objCust in customers | filter:city">{{objCust.name }}-{{objCust.city}}
        </li>
    </ul>

</div>

这是家庭控制器

namespace Routing_Angular.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            return View();
        }
        public ActionResult List()
        {
            return PartialView();
        }
        public ActionResult Edit()
        {
            return PartialView();
        }
    }
}

我附上一张图片来显示项目结构。

我正在运行应用程序,我可以看到写有“Practising Angular”的空白页面,其中包含两个锚标签“List”和“Edit”。我在更改 url 时没有得到任何更改。我在 url 中添加了“/”并且它没有更改。然后我添加了一个“/编辑”。然后我也没有发现任何变化。我在索引页面的顶部添加了锚标签,然后也没有变化。只有 url 被改变。请指导我哪里做错了。

【问题讨论】:

  • 您是否尝试将 templateUrl 更改为 Views/Home/List?

标签: asp.net-mvc angularjs asp.net-mvc-4 single-page-application angularjs-routing


【解决方案1】:

您需要在视图和角度代码中修复一些问题。 首先,在定义SimpleController时,你已经在控制器外部定义了addCustomer函数。

您应该具有以下控制器定义:

demoApp.controller('SimpleController', function ($scope) {
    $scope.customers = [{ name: 'Dave jones', city: 'Phoenix' },
        { name: 'Jhon Dena', city: 'Mexico' },
        { name: 'Bradshaw', city: 'WashingTon' },
        { name: 'Rey Mysterio', city: 'Brazil' },
        { name: 'Randy', city: 'California' }, ];

    $scope.addCustomer = function () {                
        $scope.customers.push({ name: $scope.newCustomer.name, city: $scope.newCustomer.city });
    };
});

然后在您的列表视图中,为“添加客户”按钮声明的函数是错误的,因为它区分大小写。您应该使用 addCustomer 而不是 addcustomer(大写 C,在您的 SimpleController 中定义):

<button ng-click="addCustomer()">Add customer</button>

另外,我不确定您使用的是哪个版本的 Angular,但从 1.2.0 版本开始,路由需要作为单独的模块加载(请参阅 this error)。您可以按照these instructions 安装它,添加脚本angular-route.min.js 并将您的模块声明为:

var demoApp = angular.module('demoApp', ['ngRoute']);

您将知道您需要加载路由模块,因为当初始索引视图加载时,您会在浏览器控制台中看到异常。 (无论如何,检查浏览器控制台是否有 JS 错误总是一个好主意)

应该就是这样了,希望对你有帮助!

【讨论】:

  • 非常感谢。我越来越失望了。我刚刚更新了 JS,它起作用了。
  • 但是如果我不定义路由模块并且如果我不添加 angular-route.js,你能告诉我它仍然有效吗?我刚刚将 angular.js 1.2 更新到 1.4,但是是的,您给出的其他更改是由我进行的。
  • 你确定你有 1.4 吗?最新版本目前是 1.3.0-beta.10。也许您的意思是您已从 1.1.2 升级到 1.1.4?在这种情况下,您不需要路由模块,因为版本 1.2.X 需要此模块
猜你喜欢
  • 2014-02-05
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2018-11-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
相关资源
最近更新 更多