Как получить бритву в HTML от angularjs с помощью ngRoute

Я использую библиотеку ocLazyLoad, чтобы лениво загружать угловые файлы javascript/html и вставлять их в мой модуль, как этот фрагмент кода:

    $routeProvider.when('/Home/Index', {
        templateUrl: '/app/Index.html',
        controller: 'IndexController',
        resolve: {
            deps: [
                '$ocLazyLoad', function ($ocLazyLoad) {
                    return $ocLazyLoad.load({}, {
                        name: 'mix',
                        files: [
                            '/app/IndexController.js'
                        ]
                    });
                }
            ]
        }
    });

При таком подходе я получаю статический HTML-файл из файловой системы. Но то, что я хочу, это установить templateUrl:'/Home/Index', чтобы метод действия Index в контроллере Home выполнялся, и бритва отображала указанную страницу.cshtml, а затем возвращала html с угловыми директивами.

Вот что я хочу сделать. Бритва вид:

<p>
    @foreach (var item in new List<int> { 1, 2, 3, 4, 5 })
    {
        @item
    }
</p>

<div ng-controller="IndexController as vm">
    <p>{{vm.text}}</p>
    <p>{{3 + 3}}</p>
</div>

Ответ от сервера:

<p>12345</p>
<div ng-controller="IndexController as vm">
    <p>{{vm.text}}</p>
    <p>{{3 + 3}}</p>
</div>

Наряду с этим HTML, ленивый загруженный IndexController.js Тогда Angular сделает свою работу.

Возможно ли это сделать?

1 ответ

Да, это возможно сделать. Все, что вам нужно сделать, это запомнить основы. Angular ничего не знает о вашей серверной стороне, если только вы не подвергаете его.

$routeProvider.when('/ng-Home/Index', { //It can't be the same as the Action URL since it won't work the way you want it to.
    templateUrl: '/Home/Index', //Add the html of your static page into the razor view.
    controller: 'IndexController'
    }
});

Внутренне angular будет вызывать со стороны сервера либо простой HTML-файл, либо HTML-файл, выводимый с сервера (ответ HTML, в отличие от JSON или XML). Angular не волнует, является ли это файлом или ответом HTML. Маршрутизация просто возьмет ответ HTML и выведет его.

Обычно это может привести к путанице, поскольку не весь HTML, сгенерированный Razor, будет совместим с угловым способом обработки моделей. Но это может помочь вам достичь некоторых полезных вещей, таких как использование объединения и минификации из ASP.NET. Или добавив частичное представление прямо в ваш HTML.

В представлении Razor вы можете добавить файлы JS следующим образом:

@Scripts.Render("~/Path/To/Script")

Надеюсь, поможет!

Другие вопросы по тегам