2015-02-12 4 views
2

Я использую переменную rootScope в 3 контроллерах. Первый контроллер устанавливает значение, которое используется вторым контроллером для ng-show. Но когда я попытался контролировать ng-show с третьего контроллера с помощью одной переменной rootScope, он не работает. "modstat" - переменная. Я новичок в Angular. Так что, пожалуйста, помогите мне с этим. Код приведен ниже:RootScope не работает при использовании в третьем контроллере

urlboxControllers.controller('MenuCtrl', ['$scope', '$rootScope', '$location', 'SessionService', 'AuthenticationService', 'ModalService', 
 
\t function($scope, $location, $rootScope, SessionService, AuthenticationService, ModalService){ 
 
\t \t $scope.fname = JSON.parse(sessionStorage.fname); 
 
\t \t $scope.lname = JSON.parse(sessionStorage.lname); 
 
\t \t $scope.addLink = function() { 
 
\t \t \t $rootScope.modstat = !$rootScope.modstat; 
 
\t \t \t $rootScope.modserv = true; 
 
\t \t \t //ModalService.set(1); 
 
\t \t }; \t 
 
\t \t 
 
\t \t 
 
\t \t 
 
\t \t $scope.logout = function() { 
 
\t \t AuthenticationService.logout().success(function() { 
 
\t \t \t $location.path('/login'); 
 
\t \t }); \t 
 
\t \t \t 
 
\t \t }; 
 

 
\t }]); 
 
\t 
 
urlboxControllers.controller('ModalCtrl', ['$scope', '$rootScope', '$location', 'SessionService', 'ModalService', 
 
function($scope, $location, $rootScope, SessionService, ModalService){ 
 
\t \t $scope.grid = {}; 
 

 
\t \t 
 
\t \t $scope.grid.uid = JSON.parse(sessionStorage.id); 
 
\t \t $scope.modserv = function() { 
 
     \t \t return $rootScope.modserv; 
 
    \t \t }; 
 
\t \t 
 
\t \t if($scope.modserv){ 
 
\t \t \t $scope.mtitle= "Create a Link"; 
 
\t \t } 
 
\t \t else if(!$scope.modserv){ 
 
\t \t \t $scope.mtitle= "Update Link"; 
 
\t \t } 
 
\t \t 
 
\t \t $scope.statcheck = function() { 
 
\t \t \t console.log("stat" + $rootScope.modstat); 
 
     \t \t return $rootScope.modstat; 
 
    \t \t }; 
 

 
\t \t 
 
\t \t 
 
\t \t $scope.icons = [{ico: 'cloud'}, {ico: 'envelope'}, {ico: 'pencil'}, {ico: 'search'}, {ico: 'heart'}, {ico: 'star'}, 
 
\t \t {ico: 'user'}, {ico: 'home'}, {ico: 'cog'}, {ico: 'file'}, {ico: 'time'}, {ico: 'download-alt'}, {ico: 'download'}, 
 
\t \t {ico: 'upload'}, {ico: 'lock'}, {ico: 'play-circle'}, {ico: 'tag'}, {ico: 'tags'}, {ico: 'book'}, {ico: 'bookmark'}, 
 
\t \t {ico: 'print'}, {ico: 'map-marker'}, {ico: 'tint'}, {ico: 'edit'}, {ico: 'share'}, {ico: 'plus-sign'}, 
 
\t \t {ico: 'minus-sign'}, {ico: 'ok-sign'}, {ico: 'info-sign'}, {ico: 'leaf'}, {ico: 'fire'}, {ico: 'calendar'}, 
 
\t \t {ico: 'comment'}, {ico: 'folder-close'}, {ico: 'hdd'}, {ico: 'bullhorn'}, {ico: 'bell'}, {ico: 'certificate'}, 
 
\t \t {ico: 'wrench'}, {ico: 'globe'}, {ico: 'tasks'}, {ico: 'filter'}, {ico: 'briefcase'}, {ico: 'link'}, 
 
\t \t {ico: 'paperclip'}, {ico: 'pushpin'}, {ico: 'log-in'}, {ico: 'flash'}, {ico: 'log-out'}, {ico: 'save'}, {ico: 'open'}, 
 
\t \t {ico: 'saved'}, {ico: 'send'}, {ico: 'floppy-disk'}, {ico: 'floppy-saved'}, {ico: 'tower'}, {ico: 'stats'}, 
 
\t \t {ico: 'cloud-download'}, {ico: 'cloud-upload'}, {ico: 'tree-conifer'}, {ico: 'tree-deciduous'} ]; 
 
\t \t 
 
\t \t 
 
\t \t 
 
\t \t $scope.create = function(){ 
 
\t \t \t if($scope.modserv) { 
 
\t \t \t \t 
 
\t \t \t \t \t $scope.repo = ModalService.mvalidate($scope.grid); 
 
\t \t \t \t \t 
 
\t \t \t \t \t if($scope.repo.stat === 'error'){ 
 
\t \t \t \t \t \t $scope.errcol = $scope.repo; 
 
\t \t \t \t \t } 
 
\t \t \t \t \t else if($scope.repo.stat === 'success'){ 
 
\t \t \t \t \t \t $scope.errcol = $scope.repo; 
 
\t \t \t \t \t \t ModalService.create($scope.grid).success(function(data) { 
 
\t \t \t \t \t \t 
 
\t \t \t \t \t \t \t if(data='Saved') 
 
\t \t \t \t \t \t \t { 
 
\t \t \t \t \t \t \t \t $scope.grid = {}; 
 
\t \t \t \t \t \t \t \t $scope.succ = '<div class="alert alert-success" role="alert">Saved</div>'; 
 
\t \t \t \t \t \t \t \t $rootScope.modstat = false; 
 
\t \t \t \t \t \t \t } 
 
\t \t \t \t \t \t \t else { 
 
\t \t \t \t \t \t \t \t alert(data.error); 
 
\t \t \t \t \t \t \t } 
 
\t \t \t \t \t \t 
 
\t \t \t \t \t \t }); 
 
\t \t \t \t \t } 
 
\t \t 
 
\t \t \t 
 
\t \t \t } 
 

 
\t \t }; 
 
\t \t 
 

 
\t 
 
\t \t 
 
\t \t 
 
\t \t 
 
\t }]); 
 
\t 
 
\t 
 
\t urlboxControllers.controller('GridCtrl', ['$scope', '$location', 'SessionService', 'GridService', '$rootScope', 
 
function($scope, $location, SessionService, GridService, $rootScope){ 
 
\t \t $scope.uid = JSON.parse(sessionStorage.id); 
 
\t \t 
 
\t \t GridService.gdata($scope.uid).success(function(data) { 
 
\t \t \t \t $scope.grids=data; 
 
\t \t \t }); 
 
\t \t 
 
\t \t $('#gridmod').on('hidden.bs.modal', function (e) { 
 
    \t \t \t GridService.gdata($scope.uid).success(function(data) { 
 
\t \t \t \t $scope.grids=data; \t \t 
 
\t \t \t }); 
 
\t \t \t 
 
\t \t }); 
 
\t \t 
 
\t \t $scope.getLocation = function() { 
 
    \t \t if (navigator.geolocation) { 
 
     \t \t navigator.geolocation.getCurrentPosition($scope.showPosition); 
 
    \t \t } else { 
 
     \t \t console.log("Geolocation is not supported by this browser."); 
 
    \t \t } 
 
\t \t }; 
 
\t $scope.showPosition = function (position) { 
 
    \t $scope.lat = position.coords.latitude; 
 
     $scope.lng = position.coords.longitude; 
 
\t \t GridService.weather($scope.lat, $scope.lng).success(function(data) { 
 
\t \t \t \t $scope.wdata = data; 
 
\t \t \t \t $scope.weather = $scope.wdata.weather; 
 
\t \t \t \t $scope.main = $scope.wdata.main; 
 
\t \t \t \t $scope.conv = 273.15; 
 
\t \t \t \t $scope.temp = $scope.main.temp - $scope.conv; 
 
\t \t \t \t $scope.code = $scope.weather[0].icon.slice(0,-1); 
 
\t \t \t }); 
 
\t }; 
 
\t \t $scope.getLocation(); 
 
\t \t 
 
\t \t $scope.upLink = function(lid) { 
 
\t \t \t //$rootScope.modstat = !$rootScope.modstat; 
 
\t \t \t console.log("test" + $rootScope.modstat); 
 
\t \t \t $rootScope.modserv = true; 
 
\t \t }; 
 
\t \t $scope.delLink = function(lid) { 
 
\t \t \t console.log(lid); 
 
\t \t }; 
 
\t 
 
\t 
 
\t }]);

+1

Не будучи специалистом в Угловое, не функциональные переменные в том же порядке, что и массив с указанием, какие объекты вводить? – Andreas

+0

@ Andreas Большое спасибо. Это фиксированная. Пожалуйста, напишите свой комментарий как ваш ответ. – winnyboy5

+0

Отлично! Добавлено ответ :) – Andreas

ответ

1

При настройке объектов для ввода в функции они должны поступать в том же порядке, что и в массиве. Ваш пример ->

urlboxControllers.controller('MenuCtrl', ['$scope', '$rootScope', '$location', 'SessionService', 'AuthenticationService', 'ModalService', 
function($scope, $location, $rootScope, SessionService, AuthenticationService, ModalService){} 

должен быть

urlboxControllers.controller('MenuCtrl', ['$scope', '$rootScope', '$location', 'SessionService', 'AuthenticationService', 'ModalService', 
function($scope, $rootScope, $location, SessionService, AuthenticationService, ModalService){} 
2

Я думаю, что проблема связана со вторым контроллером.

Объявление второго регулятора содержит аргументы $location и $rootScope, инвертированные в знаке функции. Вы используете это:

urlboxControllers.controller('ModalCtrl', ['$scope', '$rootScope', '$location', 'SessionService', 'ModalService', 
function($scope, $location, $rootScope, SessionService, ModalService){ 

вместо:

urlboxControllers.controller('ModalCtrl', ['$scope', '$rootScope', '$location', 'SessionService', 'ModalService', 
function($scope, $rootScope, $location, SessionService, ModalService){ 

Во втором контроллере вы устанавливаете атрибут в $location объект (именно поэтому вы не получите никакой ошибки), а затем он извлекается через $rootScope

+0

Нет, это не сработало. Модаль правильно вызывается из «Меню Ctrl», но не из Gridctrl – winnyboy5

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