В моем приложении angularJs я могу получить $ routeParams в контроллере, но как мне получить его в сервисе? Я хотел бы следить за разделением подхода и поддерживать мои http-запросы отдельно от моих контроллеров.
Я попытался ниже в моем app.js
, но я получаю Error: $injector:unpr Unknown Provider
var app = angular.module('app', ['ngRoute']); // TODO: 'ngAnimate', 'ui.bootstrap'
app.config(['$routeProvider','$locationProvider', function($routeProvider, $locationProvider){
$routeProvider
.when('/', {
templateUrl: '/app/static/home.html',
controller: 'mainController as mainCtrl'
})
.when('/match/id-:matchId', {
templateUrl: '/app/components/match/matchView.html',
controller: 'matchController as matchCtrl'
});
// use the HTML5 History API
$locationProvider.html5Mode(true);
}]);
app.controller('matchController', ['$routeParams', 'matchService', function ($routeParams, matchService) {
var matchCtrl = this;
matchCtrl.matchId = $routeParams..matchId; // how can I move this into the service
this.getMatchId = function()
{
return matchCtrl.matchId;
};
var promise = matchService.getMatch();
promise.then(function (data)
{
matchCtrl.match = data;
});
}])
app.service("matchService", function ($http, $q, matchController)
{
var matchId = matchController.getTable();
var url = 'https://jsonplaceholder.typicode.com/posts/1';
$http({
method: 'GET',
cache: true,
url: url,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
}).
success(function(response) {
//your code when success
// lgTblCtrl.amateurTable = data;
deferred.resolve(response);
console.log('SUCCESS!');
}).
error(function(response) {
//your code when fails
console.log('ERROR!');
});
this.getTable = function()
{
return deferred.promise;
};
})
спасибо, что имеет смысл, но я все еще не могу заставить его работать с тем, что вы поставили выше. В консоли нет ошибок, но когда я помещал контрольные точки в панель источника Chrome, я вижу, что он разбивается на 'this.getMatch = getMatch' перед любыми утверждениями' prom' или 'offferred'. Когда он ломается на 'deferred.resolve (response);' Я могу видеть данные в 'response', но он не передается в' matchCtrl.match = data' – Holly
. Я создам пример приложения и посмотрю на него в ближайшее время , – Aruna
Я получил его, работая с https://gist.github.com/anonymous/8c8eeec87d3b40bdbcae7c640a82ab81. Как вы думаете, он работает хорошо. Если вы добавите/включите его в свой ответ, я буду отмечать его как правильно. Большое спасибо за вашу помощь :) – Holly