$ stateParams不会传递值

时间:2017-05-15 17:36:37

标签: angularjs angular-ui-router

我试图通过简单的$ state.go()传递一个对象,但我得到的只是默认值0和""

angular ui router:

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;
}]);

2 个答案:

答案 0 :(得分:0)

不要创建新的placeInfo属性。只是传递对象。

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

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

并像这样访问该属性

$scope.placeId = $stateParams.placeId;

将新属性添加到州

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

答案 1 :(得分:0)

抱歉,您尝试过类似的事情:

app.config:

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

然后在HTML

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

然后在你的controller(或者你需要从url获取它们):

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


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

}

init();
}]);