Маршрутизация с angularjs в приложении Mvc

Я постоянно пытаюсь реализовать маршрутизацию в Angularjs с проектом Mvc 4.0, но не могу этого сделать. Я создал пустой проект MVC 4.0 и добавил контроллер «HomeController». Затем я добавил в Views папку с именем Home, имеющую три вида. Одним из них является индекс, который открывается, когда мы запускаем приложение, так как в конфигурации маршрута у нас есть маршрут для домашнего контроллера и действие индекса. Итак, в основном предполагая, что индексная страница является главной страницей в одностраничном приложении, я определил некоторый код на индексной странице, как указано в 6oish book введите здесь описание ссылки.

Показатель. 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>

Теперь мне нужны еще два представления, которые определены в приведенном выше маршруте, и они следующие:

Список.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();
        }
    }
}

Я прилагаю изображение, чтобы показать структуру проекта.

введите здесь описание изображения

Запустив приложение, я вижу пустую страницу, на которой написано «Практика Angular» с двумя якорными тегами «Список» и «Редактировать». Я не получаю никаких изменений при изменении URL-адреса. Я добавил «/» в URL-адрес, и он не изменился. затем я добавил «/ редактировать». тогда также я не нашел никаких изменений. Я добавил теги привязки вверху страницы индекса, тогда также нет никаких изменений. меняется только URL. Пожалуйста, направьте меня, где я делаю неправильно.


comment
Вы пытались изменить templateUrl на Views/Home/List?   -  person tdhulster    schedule 27.05.2014


Ответы (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 маршрутизацию необходимо загружать как отдельный модуль (см. эта ошибка). Вы можете установить его, следуя этим инструкциям, добавив скрипт angular-route.min.js и объявив свой модуль как:

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

Вы будете знать, что вам нужно загрузить модуль маршрутизации, потому что вы увидите исключение в консоли браузера, когда загружается начальное представление индекса. (В любом случае всегда полезно проверить консоль браузера на наличие ошибок JS)

Это должно быть все, надеюсь, это поможет!

person Daniel J.G.    schedule 27.05.2014
comment
Большое спасибо. Я разочаровывался. Я только что обновил JS, и это сработало. - person Sweetie; 27.05.2014
comment
но не могли бы вы сказать мне, что он все еще работает, если я не определяю модуль маршрута, а также если я не добавляю angular-route.js. Я только что обновил angular.js 1.2 до 1.4, но да, другие изменения, указанные вами, сделаны мной. - person Sweetie; 27.05.2014
comment
У тебя точно 1.4? последняя версия в настоящее время 1.3.0-beta.10. Может быть, вы имели в виду, что вы обновились с 1.1.2 до 1.1.4? В этом случае вам не нужен модуль маршрутизации, так как он требуется с версии 1.2.X. - person Daniel J.G.; 27.05.2014