2014-03-19 57 views
3

我試圖通過控制器通過UI路由器的$ stateParams到$ httpd的工廠服務。但我對如何實現這一目標一無所知。 $ http factory service根據cid參數執行獲取動態數據的角色。如何將此路由參數傳遞給工廠服務中的後端腳本。

這是我的代碼片段。

.state('category',{url:'/category/:cid',templateUrl:'views/category.html',controller:'CategoryCtrl'}) 


myapp.factory('catService', function($http) { 
    return { 
    getCategory: function(callback) { 
     $http.post('categorydetail.php').success(callback); 
    } 
    } 
}); 

myapp.controller('CategoryCtrl', function($scope, catService) { 
    catService.getCategory(function(data,status) { 
    $scope.result = data; 
    }); 
}); 

非常感謝您的幫助。謝謝。

回答

4
.state('category', { 
     url:'/category/:cid', 
     templateUrl:'views/category.html', 
     controller:'CategoryCtrl' 
} 
) 

myapp.factory('catService', function($http) { 
    return { 
    getCategory: function(cid, callback) { 
     $http.post('categorydetail.php?cid=' + cid).success(callback); 
    } 
    } 
}); 

myapp.controller('CategoryCtrl', function($scope, $stateParams, catService) { 
    catService.getCategory($stateParams.cid, function(data,status) { 
    $scope.result = data; 
    }); 
}); 
+0

感謝韋恩。這看起來像一個可行的方法來做到這一點。乾杯。 – meheshu

0

據我所知你需要在狀態準備好之前訪問$stateParams。您無法使用$stateParams對象訪問您更改的狀態的參數,直到狀態更改完成。當改變狀態的幾個事件發生從第一是$stateChangeStart你在哪裏通知有關更改狀態,並可以得到所有在這兩個州的params的,所以你可以使用$stateChangeStart事件訪問params,並把它們的地方,所以你可以在訪問它們你需要他們。

myapp.run(['$rootScope', function($rootScope) { 
    $rootScope.$on('$stateChangeStart', function (event, newState, newParams, oldState, oldParams) { 
     $rootScope.newParams = newParams; 
    }); 
}]); 

myapp.factory('catService', function($http, $rootScope) { 
    return { 
    getCategory: function(callback) { 
     $http.post('categorydetail.php?cid=' + $rootScope.newParams.cid).success(callback); 
    } 
    } 
});