2016-03-17 5 views
1

Как делиться данными со всем контроллером?Поделиться данными в AngularJs

У меня есть контроллер, который извлечения данных из сервера (file.json), что я хочу поделиться с другим контроллером

sampleApp.controller('PhoneListCtrl', 
['$scope', '$http', 
function($scope, $http) { 
    $http.get('App_Data/phonelist.json'). 
     success(function(returnDataFrmJson){ 
      $scope.phonesScope = returnDataFrmJson; 
     }); 
}]); 

контроллер, который будет иметь доступ к общим данным первого одного

sampleApp.controller('AddIPhoneController', 
['$scope', '$http', 
function($scope, $http) { 
    $scope.newInput= 'sample text'; 

    $scope.sharedText= dataFromSharedControll; 
}]); 

html-файл, который будет отображать данные.

{{newInput}} {{sharedText}} 

ответ

2

Ну, существуют различные варианты для вас, как с помощью: $sessionStorage, localStorage, appConstant, $localStorage и так далее.

Вы можете делиться данными между контроллерами, используя Factory и Services. Я дам вам простой пример использования $sessionStorage.

Для использования $sessionStorage или $localStorage вам необходимо ввести ngStorage.

Первый в вашем индексе.HTML, включают в себя источник:

<script src="https://rawgithub.com/gsklee/ngStorage/master/ngStorage.js"></script>  

Затем в определении модуля, впрыснуть ngStorage:

var sampleApp = angular.module('Your App Name', ['ngStorage']); 

И, в вашем controllers:

sampleApp.controller('PhoneListCtrl', 
['$scope', '$http', '$sessionStorage', 
function($scope, $http,$sessionStorage) { 
    $http.get('App_Data/phonelist.json'). 
     success(function(returnDataFrmJson){ 
      $scope.phonesScope = returnDataFrmJson; 
      $sessionStorage.sharedValue = returnDataFrmJson;//keeping the value in session 
     }); 
}]);  

controller, который будет иметь доступ к общим данным от первого

sampleApp.controller('AddIPhoneController', 
['$scope', '$http','$sessionStorage', 
function($scope, $http,$sessionStorage) { 
    $scope.newInput= 'sample text'; 

    $scope.sharedText= $sessionStorage.sharedValue; 
}]); 

Тогда в вашем View:

{{newInput}}{{sharedText}} 
+0

этот работает как волшебство ^^, спасибо, но как я могу получить точные данные с его формата в json. например, [{"name": "oneName", "address": 123}, {"name": "twoName", "address": 341}] –

+0

Вы можете получить доступ к ним в представлении как {{sharedText.name}} {{sharedText.address}} как таковой. –

+0

получил. от "." привязка к виду ^^, у вас есть сравнение этих сервисов и localstorage, которые хорошо подходят для этого –

0

Если я правильно понимаю ваш вопрос вы можете создать службу и внедрить его на другие контроллеры, как так:

sampleApp.service('sharedProperties', function() { 
     var sharedText = ''; 
     return { 
      getSharedText: function() { 
       return sharedText; 
      }, 
      setSharedText: function(newText) { 
       sharedText = newText; 
      } 
     } 
    } 

, а затем в контроллере:

sampleApp.controller('ControllerName', ['sharedProperties', function(sharedPropertied) { 
     var text = sharedProperties.getSharedText(); 
    }]); 

Очевидно, что вы должны установите текст где-нибудь, введя службу и установив ее на другом контроллере.

0

Вы должны обмениваться данными через службу. Также вызовы $ http в контроллере должны быть перенесены в службу. Если вы затем вводите службу в контроллер, вы можете вызвать методы/данные из этой службы в контроллере.

Я предлагаю вам взглянуть на стиль руководства Джона папиной найти здесь: https://github.com/angular/angular

0

Вы делаете неправильно данные, которые вы хотите поделиться между контроллерами должны существовать в обслуживании не контроллер

Услуги:

sampleApp.service("MyService",function($http){ 
     this.phoneList = function(){ 
      return $http.get('App_Data/phonelist.json'); 
     };   
}); 

контроллер 1:

sampleApp.controller('PhoneListCtrl1',function($scope,MyService) { 
     MyService.phoneList() 
      .then(function(list){ 
       $scope.phoneList = list; 
      }); 
    }); 

контроллер 2:

sampleApp.controller('PhoneListCtrl2',function($scope,MyService) { 
      MyService.phoneList() 
       .then(function(list){ 
        $scope.phoneList = list; 
       }); 
    }); 
0

Это зависит от требований:

  1. Если ваша цель заключается в обмен данных между контроллерами без уведомления диспетчеров, когда данные заселены/обновлены, перейдите с сервисным/заводским подходом.
  2. Если вы также хотите уведомить другие контроллеры, пока заполняет/обновляет данные, вы можете использовать угловые события ($ broadcast/$ emit).
  3. И если вы хотите сохранить данные на странице обновления или браузера закрыть, вы можете выбрать сеанс/локальное хранилище.

 Смежные вопросы

  • Нет связанных вопросов^_^