Javascript 将数据从一个控制器访问到另一个控制器-AngularJS

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) {

addressbookController

$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
。似乎某个地方可能存在错误--您可以发布控制器的完整代码吗?