gpt4 book ai didi

javascript - 如何使用具有两个不同 Controller 和不同模块的服务在不同模块之间传递数据?

转载 作者:行者123 更新时间:2023-12-03 05:33:18 25 4
gpt4 key购买 nike

我在这里所做的是,我创建了一项服务来在 Controller 之间共享数据,但问题是两个 Controller 都有不同的模块。所以我的疑问是,如何在具有不同模块的两个不同 Controller 之间进行通信。

这是我的服务
login.service.js

(function ()
{
'use strict';

angular
.module('app.pages.auth.login')
.factory('dataService', dataService);

/** @ngInject */
function dataService(){

var sendarr = [];

var addData = function(newObj) {
sendarr.push(newObj);
};

var getData = function(){
return sendarr;
};

return {
addData: addData,
getData: getData
};

}

})();

第一个 Controller login.controller.js

(function ()
{
'use strict';

angular
.module('app.pages.auth.login')
.controller('LoginController', LoginController);

/** @ngInject */
function LoginController(msApi,$state,dataService)
{
// Data
var vm = this;

vm.login = login;
vm.startApp = startApp;
vm.fbLogin = fbLogin;
var auth2;
// Methods
function fbLogin(){
FB.login(function(response){
if(response.status=='connected'){
testAPI();
}
else if(response.status == 'not_authorized'){
console.log('error');
}
else{
console.log('please log in');
}
});
}

function testAPI() {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Successful login for: ' + response.name);

});
}

function startApp(){
gapi.load('auth2', function(){
// Retrieve the singleton for the GoogleAuth library and set up the client.
auth2 = gapi.auth2.init({
client_id: '990822731291-21sdd22ujqc78l1q2i2lmf5hfe5satj1.apps.googleusercontent.com',
cookiepolicy: 'single_host_origin',
fetch_basic_profile: 'true',
// Request scopes in addition to 'profile' and 'email'
//scope: 'additional_scope'
});
attachSignin(document.getElementById('customGoogleBtn'));
});
}

function attachSignin(element) {
auth2.attachClickHandler(element, {},
function(googleUser) {
var profile = googleUser.getBasicProfile();
console.log('ID: ' + profile.getId()); // Do not send to your backend! Use an ID token instead.
console.log('Name: ' + profile.getName());
console.log('Image URL: ' + profile.getImageUrl());
console.log('Email: ' + profile.getEmail());
var pushData = [profile.getId(), profile.getName(), profile.getEmail()];
console.log(pushData);
dataService.addData(pushData);
$state.go('app.pages_auth_verify-mobile')
},
function(error) {
alert(JSON.stringify(error, undefined, 2));
});
}

function login(){
var jsonData = {"mobile":vm.form.mobile};
msApi.request('login.credentials@save',jsonData,
// SUCCESS
function (response)
{
console.log(response.error);
if(response.error == 1){
vm.form.mobileErrorFlag = true;
}
if(response.error == 0){
vm.form.mobileErrorFlag = false;
}
},
// ERROR
function (response)
{
alert(JSON.stringify(response));
}
)
}



}
})();

第二个 Controller verify-mobile.controller.js

(function ()
{
'use strict';

angular
.module('app.pages.auth.verify-mobile',["app.pages.auth.login"])
.controller('VerifyMobileController', VerifyMobileController);

/** @ngInject */
function VerifyMobileController(dataService)
{
var data = dataService.getData();

alert(data);
}
})();

请有人帮忙吗?

最佳答案

我认为你没有错。但我认为你应该为你的 dataService 创建一个模块并在其他模块之间共享它。您的dataService并不真正依赖于您的登录模块,因此您可以使其独立。

类似这样的东西:

  angular
.module('app.services.shared')
.factory('dataService', dataService);

angular
.module('app.pages.auth.login',["app.services.shared"])
angular
.module('app.pages.auth.verify-mobile',["app.services.shared"])

但这是主观的......

希望对你有帮助。

更新1

示例如下 plunkr

关于javascript - 如何使用具有两个不同 Controller 和不同模块的服务在不同模块之间传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40839985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com