Создать единый вид html для нескольких частичных представлений в angularjs

Я хочу создать один html файл с несколькими тегами. Они должны действовать как отдельные индивидуальные представления, которые обычно хранятся в папке partials. И затем я хочу указать их в контроллере маршрутизации. Сейчас я делаю следующее: app.js

    angular.module('productapp', []).
    config(['$routeProvider', function($routeProvider) {
    $routeProvider.
        when('/productapp', {templateUrl: 'partials/productList.html', controller: productsCtrl}).
        when('/productapp/:productId', {templateUrl: 'partials/edit.html', controller: editCtrl}).
        otherwise({redirectTo: '/productapp'});
        }], 
        ['$locationProvider', function($locationProvider) {
            $locationProvider.html5Mode = true;
}]);

index.html

    <!DOCTYPE html>
<html ng-app = "productapp">
<head>
<title>Search form with AngualrJS</title>
        <script src="../angular-1.0.1.min.js"></script>
        <script src="http://code.jquery.com/jquery.min.js"></script>
        <script src="js/products.js"></script>
        <script src="js/app.js"></script>
</head>
<body>
    <div ng-view></div>
</body>
</html> 

в папке partials: У меня есть 2 html-представления с именем edit.html и productlist.html

вместо того, чтобы создавать эти 2 файла, я хочу объединить их в один отдельно и вызвать их (divs) через маршрутизацию. Как это сделать?

Ответ 1

Вы можете использовать ng-switch для условного отображения вашего productList с помощью include, в зависимости от параметров маршрута.

Попробуйте это в своей конфигурации:

    angular.module('productapp', [])
      .config(['$routeProvider', function($routeProvider) {
      $routeProvider
        .when('/productapp', {templateUrl: 'partials/productList.html', controller: productsCtrl})
        .when('/productapp/:productId', {templateUrl: 'partials/productList.html', controller: productsCtrl})
        .otherwise({redirectTo: '/productapp'});

И в вашем контроллере:

    function productsCtrl($scope, $routeParams) {
      $scope.productId = $routeParams.productId;
    }

И в вашем html:

    <...productListHtml...>
    <div ng-switch="productId != null">
      <div ng-switch-when="true" ng-include="'partials/product.html'">
    </div>

Ответ 2

У меня возникла проблема с вложением представлений и глубокой привязкой в ​​ Angular, поскольку $routerProvide не поддерживает несколько ng-view. Но я нашел возможное решение, как это сделать . Он основан на ручной передаче маршрутов вручную с использованием контекста запроса и контекста визуализации.

Ответ 3

У меня была та же проблема, теперь есть решение для нее, используя: UI-Router

Преимущество использования этого, а не ngRoute заключается в том, что вы можете иметь несколько представлений на одной странице, используя соглашение об именах "ui-view".