2014-10-31 6 views
0

Я заметил, что в одном из моих контроллеров я получаю $ rootScope и $ scope вложенные, и оба они указывают на один и тот же объект.Объем и объем области углового корня

Кроме того, во всех моих других контроллерах объект $ scope является общим. Поэтому всякий раз, когда я вводя область видимости, она содержит свойства/методы, назначенные ей во всех других контроллерах, которые до сих пор были созданы.

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

То, как мы создаем наши контроллеры/директивы является довольно стандартным, и это выглядит следующим образом:

angular.module('myApp') 
    .directive('mainNav', function() { 
    return { 
     restrict: 'A', 
     templateUrl: 'scripts/directives/mainNav/mainNav.html', 
     controller: 'mainNavCtrl', 
     replace: true, 
     link: function(scope, element) { 
      //Do DOM-related stuff 
     }); 
     } 
    }; 
    }) 
    .controller('mainNavCtrl', function($rootScope, $scope, $state) { 
    //Do controller stuff 
    }); 

Мы также настроить наше приложение следующим образом:

angular.module ('MYAPP', [ 'ui.router', 'kendo.directives'])
.config (функция ($ stateProvider, $ urlRouterProvider) { $ urlRouterProvider.otherwise ('/');

$stateProvider 
    .state('app', { 
    url: '/', 
    templateUrl: 'views/app.html', 
    resolve: { 
     //Fetch stuff 
    } 
    }) 
    ; }); 

В ответ на комментарий Kürşad Gulseven, это то, что я вижу в Batarang:

Batarang screenshot

Область с ID 002 получает передается в виде $ объеме и $ rootScope первого контроллера , Когда свойства добавляются в $ scope, они отображаются на $ rootScope. Затем все остальные контроллеры получают область с идентификатором 00A. Таким образом, свойства, добавленные в $ scope в этих контроллерах, видны всем остальным контроллерам, получающим $ scope.

+0

Режимы Child наследуют свойства родительских объектов, если они не переопределены. Возможно, это то, что происходит. – Shomz

ответ

0

$ rootScope и $ scope: не тот же объект.

Если у вас есть объект с именем anObject в корневой области видимости и имеет атрибут с именем anAttribute; то вы можете получить доступ к этому атрибуту, используя $ рамки, как это:

$scope.anObject.anAttribute 

Это потому, что Угловая смотрит родитель областей, если он не может найти объект в $ области.

UPDATE:

Ваша директива Mainnav должна иметь унаследованную ребенка сферу путем добавления scope: true. Когда «scope» имеет значение false, которое является настройкой по умолчанию для директив, родительский контроллер и контроллер директивы совместно используют один и тот же объект области видимости. Установка области true приведет к созданию новой дочерней области для этой директивы.

+0

Ну, я заметил, что rootScope и scope имеют одинаковый ID (002 в этом случае). Кроме того, когда я добавляю свойства в область моего контроллера, они также отображаются на корневой панели. Не похоже на дочернее свойство на rootScope, но сам rootScope. – lintmouse

+0

Что вы видите на дереве видимости Batarang? В одной области с id 002 или множеством вложенных областей все они имеют id 002? –

+0

Хорошо, проверьте мое обновление на мой вопрос. – lintmouse

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