2017-05-15 4 views
0

私は、単純な$のstate.go()でオブジェクトを渡すためにしようとしていますが、私が得るすべては、デフォルト値0と「」

角度UIルータです:

placesApp.config(($stateProvider, $urlRouterProvider) => { 
    $urlRouterProvider.otherwise("/home"); 

    $stateProvider 

     .state("home", { 
      url: "/home", 
      templateUrl: "views/search-result.html", 
      controller: "HomeCtrl" 
     }) 

     .state("placeDetail", { 
      url: "/place-detail", 
      templateUrl: "views/place-detail.html", 
      controller: "PlaceDetailCtrl", 
      params: { 
       placeId: 0, 
       placeImg: "" 
      } 
     }) 
}); 

機能をトリガリンク:

<a ui-sref="placeDetail" class="place-name" ng-bind="place.venue.name" ng-click="goToPlaceDetail()"></a> 

場所詳細機能は、私はこれはHomeCtrlないべきではないということ。それはHomeCtrlに関連するディレクティブである:

placesApp.directive("placeGrid",() => { 
    return { 
     restrict: "E", 
     replace: true, 
     controller: ["$scope", "$state", "$stateParams", ($scope, $state, $stateParams) => { 

      var imgObj = $scope.place.venue.photos.groups[0].items[0]; 
      var placeId = $scope.place.venue.id; 
      var placeImg = imgObj.prefix + "1280x600" + imgObj.suffix; 
      var placeInfo = {placeId: placeId, placeImg: placeImg}; 

      $scope.goToPlaceDetail =() => { 
       $state.go("placeDetail", {placeInfo: placeInfo}); 
      }; 
     }], 
     templateUrl: "views/place-grid.html" 
    } 
}); 

placeDetailコントローラ:

placesApp.controller("PlaceDetailCtrl", ["$scope", "$state", "$stateParams", ($scope, $state, $stateParams) => { 

    $scope.placeId = $stateParams.placeInfo.placeId; 
    $scope.placeImg = $stateParams.placeInfo.placeImg; 
}]); 

答えて

0

は新しいplaceInfoプロパティを作成しないでください。オブジェクトを渡すだけです。

var placeInfo = {placeId: placeId, placeImg: placeImg}; 

$scope.goToPlaceDetail =() => { 
    $state.go("placeDetail", placeInfo); 
}; 

そして申し訳状態に

.state("placeDetail", { 
      url: "/place-detail", 
      templateUrl: "views/place-detail.html", 
      controller: "PlaceDetailCtrl", 
      params: { 
       placeInfo: { 
        placeId: 0, 
        placeImg: "" 
       }    
      } 
     }) 
+0

はまだデフォルトの値を取得0と "" – brainmassage

+0

の2つ目の方法を試してください –

+0

まだ同じです。編集:私の以前のコメントは無関係でした – brainmassage

0

を新しいプロパティを追加し、この

$scope.placeId = $stateParams.placeId; 

OR

のようにプロパティにアクセスするには、次のようなものを試してみました:

あなたの HTMLで、あなたの app.config:

.state("placeDetail", { 
      url: "/place-detail/:placeId/:placeImg", 
      templateUrl: "views/place-detail.html", 
      controller: "PlaceDetailCtrl", 
      params: { 
       placeId: 0, 
       placeImg: "" 
      } 
     }) 

:あなたのcontroller(またはどこがURLからそれらを取得する必要があります)で、その後

<a ui-sref="placeDetail({id:place.venue.id,placeImg:place.venue.name})" class="place-name" ></a> 

placesApp.controller("PlaceDetailCtrl", ["$scope", "$state", "$stateParams", ($scope, $state, $stateParams) => { 


function init(){ 
    $scope.placeId = $stateParams.placeId; 
    $scope.placeImg = $stateParams.placeImg; 

} 

init(); 
}]); 
関連する問題