Я использую библиотеку 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', поэтому метод индексации в Home controller выполняется, а razor отображает указанную страницу.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 Затем угловой выполнит свою работу.
Можно ли это сделать?
Да, это возможно. Все, что вам нужно сделать, это запомнить основы. Угловая ничего не знает о вашей серверной стороне, если вы не разоблачите ее.
$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'
}
});
Внутри угловой вызовет со стороны сервера либо простой HTML файл, либо HTML, выводимый с сервера (ответ HTML, в отличие от JSON или XML). Угловому не важно, является ли это файлом или ответом HTML. Маршрутизация будет просто принимать ответ HTML и выводить его.
Обычно это может стать беспорядочным, поскольку не все созданные Razor HTML будут соответствовать угловому способу обработки моделей. Но это может помочь вам в достижении каких-либо удобных возможностей, таких как использование связывания и минимизации из ASP.NET. Или добавление частичного представления непосредственно в ваш HTML.
В представлении Razor вы можете добавить свои JS файлы следующим образом:
@Scripts.Render("~/Path/To/Script")
Надеюсь, поможет!