私は2つのモジュールを接続する必要があります。 mainPageと呼ばれるメインモジュールには、ルータと呼ばれる第2のモジュールが組み込まれています。それらは別々のファイルにあります。私はmainPAGEとルータでuserPropagatorServiceというサービスを使いたいと思っています。 このサービスは、現在ログインしているユーザーを取得および設定するために使用する必要があります。 ルータモジュールにサービスを注入しようとしましたが、エラーが発生します。 これをどうすれば実現できますか?複数のモジュールでサービスを使用するAngularJS
メインページファイル:
var app = angular.module('mainPage',['reg','router']);
//Returns a promise which generates our user.
app.factory('userLoginService',['$http',function ($http){
return{
loginService: function(username,password){
var info = {username:username, password:password}
var user={};
//Returning http request because of promises
return $http({
url: 'webapi/users/login',
method: 'POST',
data: info,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
transformRequest: function(obj) {
var str = [];
for(var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},
data:{username: info.username, password: info.password}
}).then(function (response)
{
user = response.data
return user;
});
}
}
}]);
app.service('userPropagatorService', function(){
return{
get:function(){
return this.u;
},
set:function(user){
this.u = user;
}
}
});
ルータファイル:
var r = angular.module('router',['ngRoute'])
.config(['$routeProvider', '$locationProvider','userPropagatorService',
function($routeProvider, $locationProvider, userPropagatorService) {
$locationProvider.html5Mode(true);
$routeProvider
.when("/home",{
templateUrl: "pages/MainPage.html",
controller:"homeController"
})
.when("/forums",{
templateUrl: "pages/forumsPage.html",
controller:"forumController"
})
.when("/topics",{
templateUrl: "pages/topicsPage.html",
controller:"topicsController"
})
.when("/comments",{
templateUrl: "pages/commentsPage.html",
controller:"commentsController"
})
.otherwise({
redirectTo:"/home"
});
}])
.controller("homeController",['$scope','$http',function($scope,$http){
/*$http({
url: "webapi/forums/all",
method:"GET"
})
.then(function(response){
console.log("YEA!");
console.log(response.data);
},
function(response){
console.log("NO:(");
})*/
$scope.username = "visitor!"
$scope.user = userPropagatorService.get();
if($scope.user != null){
$scope.username=$scope.user.username + "!";
}
}])
.controller("forumController",['$scope','$http',function($scope,$http){
$scope.username = "visitor!"
}])
.controller("commentsController",['$scope','$http',function($scope,$http){
$scope.username = "visitor!"
}]);
をもの、私が疑われるのカップルがあります。 1. 'userLoginService'は' mainPage'モジュールの一部です。 'router'の中では利用できません(共通のコンポーネントを持つseparte' common'モジュールを作成することをお勧めします)2.サービス/ファクトリは 'config'ブロックの中に挿入されません。サービスよりもプロバイダを作成する(それはあなたが扱っている状況に依存します)サービスを利用できるように 'resolve'を使うことができるかもしれません。 –
サービスは設定ブロックに挿入できません。 Docs:* Configurationブロックから - プロバイダの登録と設定フェーズで実行されます。構成ブロックにはプロバイダと定数だけを注入できます。これは、完全に構成される前に誤ってサービスがインスタンス化されるのを防ぐためです。詳細については、「AngularJS開発者ガイド - モジュール読み込みと依存関係」(https://docs.angularjs.org/guide/module#module-loading-依存関係)。 – georgeawg
@PankajParkar私はプロバイダを使用することはできません、それはまったく役に立ちません。私は共通のモジュールを作成しようとしましたが、それでも他のモジュールはpropagatorServiceを見ることができません。 – Riki