2015-11-14 5 views
2
'use strict'; 

angular.module('sampleApplicationApp').config(function($stateProvider) 
{ 
    $stateProvider.state('abcmanagement', { 
     parent : 'parentmanagement', 
     url : '/em', 
     views : { 
      '[email protected]' : { 
       templateUrl : 'scripts/app/abc.html', 
       controller : 'abcController' 
      } 
     } 
    }).state('newmodel', { 
     parent : 'abcmanagement', 
     url : '/new', 
     views : { 
      '[email protected]' : { 
       templateUrl : 'scripts/app/xyz.html', 
       controller : 'xyzController' 
      } 
     } 
    }) 
}); 

angular.module('sampleApplicationApp') 
.controller('abcController', function ($scope, $state, $modal) { 

     $scope.models = {}; 
     // logic to load models 

}); 

angular.module('sampleApplicationApp') 
.controller('xyzController', function ($scope, $state, $modal) { 

     // I want to access models from above controller 

}); 

Есть ли возможность иметь доступ к моделям, определенным в abcController, от xyzController?Доступные переменные, определенные в другом контроллере

+1

Вы можете использовать службы для доступа к данным в нескольких контроллерах. – giladk

ответ

4

два варианта:

  1. если контроллеры наследуют от одного родительского контроллера, вы можете хранить данные в родительском $ объеме (или $ rootScope, но это плохая практика);
  2. если контроллеры не наследуют от одного родительского контроллера, использовать фабрику для обмена данными между контроллерами:

`

angular.module('sampleApplicationApp') 
    .factory('abcModel', function() { 
    var factory = {}; 
    var model = {}; 

    factory.setModel = function(key, value) { 
     model[key] = value; 
    } 
    factory.getModel = function(key) { 
     return model[key]; 
    }; 
    return factory; 
}); 

angular.module('sampleApplicationApp') 
.controller('abcController', function ($scope, $state, $modal, abcModel) { 
    abcModel.setModel('abc', "hello world"); 

}); 

angular.module('sampleApplicationApp') 
.controller('xyzController', function ($scope, $state, $modal, abcModel) { 
    $scope.value = abcModel.getModel('abc'); 

}); 
0

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

Вы можете обойти его, используя $rootScope. Не забывайте вводить его в обоих контроллерах;)

1

Вы, возможно, целых три варианта:

1) Если xyzController проживает в пределах abcController в вашем HTML, то вы можете ссылаться на $parent.property ('property' является именем свойства $scope в родительском контроле вы хотите получить доступ).

2) Вы можете использовать $rootScope, установив любые свойства, которые хотите получить доступ к таким контроллерам, как $rootScope.property. Я бы рекомендовал избегать этого, поскольку он мог бы загрязнять глобальную сферу.

3) Вы можете использовать услугу «Угловая» с методами получения и установки переменных, о которых идет речь. Затем вы можете просто добавить эту службу в качестве зависимости в каждом контроллере, где вам нужен доступ к этим переменным. Рекомендованный подход

+0

2.1) Мы также можем написать 'window.sharedData = data;' также. темная сторона ... –

+1

@vp_arth, правда. Вариант 2 следует избегать любой ценой. Единственный момент, когда я действительно касаюсь '$ rootScope', - это когда транслируются события, которые прослушивают другие контроллеры, но даже это мне не нравится. – MattDionis

0

Существует много способов добиться того, что вы пытаетесь сделать. Вы можете создать завод или услугу, вы можете использовать $ rootScope (не рекомендуется), вы можете использовать широковещательную передачу углов, this.Refer к этому примеру http://stackoverflow.com/questions/21919962/share-data-between-angularjs-controllers

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