Javascript 将数据从一个控制器访问到另一个控制器-AngularJS
addressbookController:Javascript 将数据从一个控制器访问到另一个控制器-AngularJS,javascript,arrays,angularjs,json,object,Javascript,Arrays,Angularjs,Json,Object,addressbookController: $http({ method: 'GET', url: '/api/getnewgroup' }) .then(function (response) { $scope.draft.groups = response.data; $scope.groups = response.data; // updated }, function (response) {
$http({
method: 'GET',
url: '/api/getnewgroup'
})
.then(function (response) {
$scope.draft.groups = response.data;
$scope.groups = response.data; // updated
}, function (response) {
console.log(response);
});
$scope.draft = {
draftType: '',
scheduledTime: '',
senderdata: '',
draftData: {
contacts: ''
},
groups: {
select: false
},
senderName: '',
message: '',
draftName: '',
createdOn: '',
updatedOn: ''
};
在上面的这个控制器中,我在$scope.draft.groups中得到json响应,我在另一个名为profsmsController的控制器中有这个draft对象
profscscontroller:
$http({
method: 'GET',
url: '/api/getnewgroup'
})
.then(function (response) {
$scope.draft.groups = response.data;
$scope.groups = response.data; // updated
}, function (response) {
console.log(response);
});
$scope.draft = {
draftType: '',
scheduledTime: '',
senderdata: '',
draftData: {
contacts: ''
},
groups: {
select: false
},
senderName: '',
message: '',
draftName: '',
createdOn: '',
updatedOn: ''
};
如何访问$scope对象
我的控制器:
angular
.module('sampleApp.controllers', [])
//addressbook page controller
.controller('addressbookCtrl', function ($http, $scope, $rootScope, $location,
$state, toastr, $timeout, $window, sharedService) {
// Groups
// get group
$http({
method: 'GET',
url: '/api/getnewgroup'
})
sharedService.getDraftPromise().then(function (response) {
$scope.groups = response.data;
$scope.draft.groups = response.data;
}, function (response) {
console.log('error');
});
})
.controller('profsmsCtrl', function ($http, $scope, $rootScope, $location,
$state, toastr, $timeout, $window) {
/* for drafts */
$scope.draft = {
draftType: '',
scheduledTime: '',
senderdata: '',
draftData: {
contacts: ''
},
groups: {
select: false
},
senderName: '',
message: '',
draftName: '',
createdOn: '',
updatedOn: ''
};
//add draft
$scope.addmanualInputDraft = function () {
$http.post('/api/addmanualinputdraft', $scope.draft).then(function (response) {
toastr.success("Added successfully!");
$('.bd-example-modal-lg-manual').modal('hide');
$state.reload();
});
}
})
My services.js:
angular
.module('sampleApp.services', [])
.factory('sharedService', function ($http) {
var draftPromise = $http({
method: 'GET',
url: '/api/getnewgroup'
});
return {
getDraftPromise: function () {
return draftPromise;
}
};
});
我的app.js:
'use strict';
angular
.module('sampleApp', ['sampleApp.controllers', 'sampleApp.directives','sampleApp.services','sampleApp.filters','ui.router','toastr','ngSanitize', 'ui.select'])
.config(function($stateProvider, $urlRouterProvider, $locationProvider) {
$locationProvider.hashPrefix('');
$urlRouterProvider.otherwise('/dash');
$stateProvider
.state('dash', {
url: '/dash',
templateUrl: 'partials/dash',
})
.state('quicksms', {
url: '/quicksms',
templateUrl: 'partials/quicksms',
controller: 'quicksmsCtrl'
})
.state('professionalsms', {
url: '/professionalsms',
templateUrl: 'partials/professionalsms',
controller: 'profsmsCtrl'
})
.state('file2sms', {
url: '/file2sms',
templateUrl: 'partials/file2sms',
controller: 'file2smsCtrl'
})
.state('addressbook', {
url: '/addressbook',
templateUrl: 'partials/addressbook',
controller: 'addressbookCtrl'
})
});
这是更新的完整代码。我想从addressbook Controller访问$scope.draft.groups对象。一般来说,您想创建一个服务来保存共享数据:
myApp.factory('sharedService', function($http) {
var draftPromise = $http({
method: 'GET',
url: '/api/getnewgroup'
});
return {
getDraftPromise: function() {
return draftPromise;
}
};
});
在控制器中,您可以通过将服务声明为依赖项来使用该服务:
myApp.controller("myController", function($scope, sharedService) {
sharedService.getDraftPromise().then(function(response) {
$scope.draft.groups = response.data;
});
});
两个控制器将引用相同的draftPromise
实例
注意:如果要缩小代码,则需要使用替代语法进行使用数组的依赖项注入。看看。创建服务,它将负责在应用程序的不同组件之间共享数据。如果不知道如何创建服务,您会共享一些代码吗?我将从中学习。我建议大家看一下更新后的答案——你必须在你的控制器中将
sharedService
声明为一个依赖项如果你使用的是精简的代码,你需要使用依赖项注入的语法,它使用这样的数组:myApp.controller(“myController”),[“$scope”,“sharedService”,函数($scope,sharedService){…}])代码>。否则,当代码变小时,控制器将无法识别$scope
或sharedService
。这不是问题,请参阅我的草稿对象,我的草稿对象中有组。查看我的响应我将该响应存储在$scope.draft.groups中,但在这里它只接受$scope.draft并将控制台作为“TypeError:无法设置未定义的属性'groups'。您需要确保在设置$scope.draft.groups
之前定义了$scope.draft
。您可以执行如下操作:$scope.draft={groups:response.data}
,这将在同一语句中定义$scope.draft
和$scope.draft.groups
。似乎某个地方可能存在错误--您可以发布控制器的完整代码吗?