2016-03-22 4 views
0

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

var elasticui; 
(function (elasticui) { 
var directives; 
(function (directives, rootScope) { 
    var IndexDirective = (function() { 
     function IndexDirective() { 
      var directive = {}; 
      directive.restrict = 'EAC'; 
      directive.controller = elasticui.controllers.IndexController; 
      directive.link = function (scope, element, attrs, indexCtrl, rootScope) { 
      console.log("Updated Index: " + $rootScope.esIndex); 
      indexCtrl.indexVM.index = scope.$eval(attrs.euiIndex); 
      }; 
      return directive; 
     } 
     return IndexDirective; 
    })(); 
    directives.IndexDirective = IndexDirective; 
    directives.directives.directive('euiIndex', IndexDirective); 
})(directives = elasticui.directives || (elasticui.directives = {})); 
})(elasticui || (elasticui = {})); 

В другом месте я устанавливаю $ rootScope.esIndex индексу Я хотел бы указать, но я получаю «$ rootScope не определен». Я попытался установить свойство области действия директивы в false, попытался настроить наблюдателя на $ rootScope.esIndex как часть возвращаемого значения функции ссылок, но независимо от того, что я делаю, я не могу понять, что это так.

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

Любые идеи, как я могу легко захватить $ rootScope здесь?

Спасибо TON заранее!

+0

Здесь вы обязательно должны указать больше кода, но я скажу, что при первом взгляде вы передаете функцию 'rootScope', а не' $ rootScope'. Это может быть частью проблемы. –

ответ

0

Увидеть больше вашего кода поможет. В частности, когда вы говорите, что «$ rootScope действительно передается». Тем не менее, с этой ограниченной информации, почему бы вам не попробовать изменить эту строку:

(directives = elasticui.directives || (elasticui.directives = {})); 

к чему-то вроде

(directives = elasticui.directives || (elasticui.directives = {}, rootScope)); 

На первый взгляд это кажется вашей собственной личности функции выполняющийся не передается параметр rootScope он ожидает. Удачи!

редактировать: Также

console.log("Updated Index: " + $rootScope.esIndex); 

Если, вероятно, не имеют знак доллара.

Редактировать: Комментарии имеют гораздо больше информации!

+0

Это модификация следующего кода см строки 179 https://github.com/YousefED/ElasticUI/blob/master/dist/elasticui.js Я пытаюсь закончить с чем-то вроде: indexCtrl.indexVM.index = $ rootScope.esIndex; Если я выхожу из $ rootScope.esIndex в контроллере страницы, я получаю правильное значение, и кажется, что rootScope действительно передается в контроллер родительского элемента, но я не могу получить доступ к нему из самой директивы. В моей версии я убил наблюдателя только для того, чтобы упростить его, но да, приведенная выше страница - это то, с чем я работаю. – omenclature

+0

Вам нужно объявить инъецированную службу $ rootScope, как они делают в строке 294, тогда ее можно передать как аргумент вашей функции, как показано в строке 276. Таким образом, у вас будет IndexDirective. $ Injection = ['$ rootScope'] ; затем функцию IndexDirective ($ rootScope) .... Также выведите rootScope из аргументов в свою функцию ссылок, которая вам не нужна. –

+0

P.s. «Ваниль» Угловая не так, я не знаком с эластивом, но я согласен, что это немного загадочно в синтаксисе. –

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