为angularjs中的多个局部视图创建单个html视图

时间:2012-09-25 06:33:58

标签: routing routes 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个名为edit.html和productlist.html

的html视图

而不是创建这两个文件,我希望将它们组合成一个单独的文件并通过路由调用它们(div)。 我该怎么做?

3 个答案:

答案 0 :(得分:42)

您可以使用ng-switch有条件地使用include呈现productList,具体取决于路由参数。

在您的配置中尝试此操作:

    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>

答案 1 :(得分:0)

我在Angular中嵌套视图和深层链接存在问题,因为$ routerProvide不支持多个ng-view ..但我找到了一个可能的解决方案,如何实现这一点here。它基于使用请求上下文和渲染上下文手动处理路由。

答案 2 :(得分:0)

我有同样的问题,现在有一个解决方案,使用: UI-Router

使用此功能而非ngRoute的优点是您可以使用&#34; ui-view&#34;在同一页面中拥有多个视图。命名惯例。