具有主细节模式的UI-Router $ stateParams

时间:2015-06-11 22:28:43

标签: javascript angularjs nested angular-ui-router state

我的网站需要Master Detais模式。在索引批量缩略图和每个缩略图链接到他们的详细页面。我取得了进步,但没有开始工作。它在索引上加载缩略图,但是当我点击缩略图加载空白页时。

索引:

<body ui-view="viewA">
<div class="row" ui-view="viewB">
        <div class="col s12 m6 l4" ng-repeat = "manga in mangas">
        <div class="row">
        <div class="col s5">
            <a ui-sref="icerikDetails({id:manga.id})" class="thumbnail">
            <img src="/kapaklar/{{manga.kapak}}">
</a>

JS:

angular.module('nasuh',["ui.router"])
.config(function($stateProvider, $urlRouterProvider) {

$stateProvider
.state('index', {
   url: "/",
   views: {
   "viewA": { templateUrl: "index.html",
            controller: "indexCtrl",}
}})
$stateProvider
.state('icerik', {
   url: "/icerik",
   views: {
        "viewB": { templateUrl: "icerik.html",
                   controller: "mmgCtrl",},
}})
$stateProvider
.state('icerikDetails', {
    url: "/icerik/:id",
    template: "<div>{{details }}</div>",
    controller: "mmgCtrl",
    resolve: {
             getData : function(MY, $stateParams, $filter){
             return MY.isimler.then(function(res){
             return $filter('filter')(res.data, {id: $stateParams.id}, true)[0];
});}
}
})
$urlRouterProvider.otherwise("/");
})

工厂和控制人员:

.factory('MY', function($http){
 var factory = {};
 var url = '/uzak/remote.php?callback=JSON_CALLBACK';
 factory.isimler = $http.get(url);
 return factory;
})
.controller('indexCtrl', function($scope, MY) {
     MY.isimler.success(function(alHemen){
          $scope.mangas = alHemen;
     });  
 })
.controller('mmgCtrl', function($scope, getData) {
 $scope.manga = getData.then(function(data){
   $scope.details = data;
 });})

1 个答案:

答案 0 :(得分:1)

我不确定您要实现的目标,但至少我试图将您的代码段转换为可用的内容。

a working example

要获得更多理解,请阅读以下内容:

Nested States and Nested Views

Multiple Named Views

这些是状态,有一个hiererchy。索引是超级根,细节是超级孩子:

$stateProvider
    .state('index', {
      url: "/",
      views: {
        "": {
          templateUrl: "index.tpl.html",
          controller: "indexCtrl",
        }
      }
    })
    .state('icerik', {
      parent: "index",
      url: "^/icerik",
      views: {
        "viewA": {
          templateUrl: "icerik.html",
          controller: "indexCtrl",
        },
      }
    })
    .state('icerik.icerikDetails', {
      url: "/icerik/:id",
      template: "<div>{{manga}}</div>",
      controller: "mmgCtrl",
      resolve: {
        getData: function(MY, $stateParams, $filter) {
          return MY.isimler.then(function(res) {
            return $filter('filter')(res.data, {
              id: $stateParams.id
            }, true)[0];
          });
        }
      }
    })
  $urlRouterProvider.otherwise("/");

这些将是新的控制器和工厂:

.factory('MY', function($http) {
    var factory = {};
    //var url = '/uzak/remote.php?callback=JSON_CALLBACK';
    var url = 'data.json';
    factory.isimler = $http.get(url);
    return factory;
})
.controller('indexCtrl', function($scope, MY) {
    MY.isimler.success(function(alHemen) {
      $scope.mangas = alHemen;
    });
})
.controller('mmgCtrl', function($scope, getData) {
    //$scope.manga = getData.then(function(data){
    //   $scope.details = data;
    // });
    $scope.manga = getData;
})

模板“index.tpl.html”的一个例子:

<div >
  <h2>  this is index view</h2>
  <a href="#/icerik">icerik</a>

    <div ui-view="viewA"></div>    
</div>

和“icerik.html”:

<div class="row" >
        <div class="col s12 m6 l4" ng-repeat="manga in mangas">
        <div class="row">
        <div class="col s5">
            <a ui-sref="icerik.icerikDetails({id:manga.id})" class="thumbnail">
            img src="/kapaklar/{{manga.kapak}}" 
            </a>
  </div>
  </div>
  </div>

  <hr>
  <div ui-view=""></div> 
</div>

检查here