2015-01-11 2 views
2

Я звоню директиву с:Доступ сфера недвижимости в директиве

<latest-survey survey="latestSurvey"></latest-survey> 

Код для моей директивы:

function latestSurvey(){ 
    return { 
     restrict: 'E', 
     templateUrl: 'js/modules/survey/latest.html', 
     scope: { 
      survey: '=survey' 
     }, 
     link: function(scope, element, attrs){ 
      console.log(scope); 
      console.log(scope.survey); 
     } 
    } 
} 

console.log(scope) линия выводит объем:

Scope {$id: "007", $$childTail: null, $$childHead: null, $$prevSibling: null, $$nextSibling: null…} 
$$asyncQueue: Array[0] 
$$childHead: null 
$$childTail: null 
$$destroyed: false 
$$isolateBindings: Object 
$$listenerCount: Object 
$$listeners: Object 
$$nextSibling: 
$$childScopeClass 
$$phase: null 
$$postDigestQueue: Array[0] 
$$prevSibling: null 
$$watchers: Array[3] 
$id: "007" 
$parent: 
$$childScopeClass 
$root: Scope 
survey: Object 
this: Scope 
__proto__: Scope 

Как видите, здесь отображается survey, и я могу перемещаться по нему в консоли его свойства. Тем не менее, следующая строка console.log(scope.survey) выходы:

undefined 

Как я могу получить доступ к этому объекту в области видимости?

+0

Что произойдет, если вы используете '{{survey}}' в своем шаблоне директивы? –

+0

В нем указан объект съемки. Я могу получить к нему доступ в шаблоне, но не по какой-либо причине. – babbaggeii

+0

Выглядит отлично. Попробуйте опубликовать фрагмент или скрипку? – pixelbits

ответ

0

Является ли опрос загружен асинхронно в контроллер (latestSurvey)? Одна из причин, по которой scope.survey равна undefined, может быть вызвана тем, что запрос не завершился, и элемент пуст.

Предлагаю попытаться установить $scope.latestSurvey с некоторыми фиктивными данными и посмотреть, сохраняется ли проблема.

+0

Да, он загружается асинхронно. Как я могу заставить его обновить область действия директивы, когда она входит? – babbaggeii

+0

Вы можете использовать «@» вместо «=», или вы можете просто добавить экран загрузки и скрыть контент, а затем показать его, когда обещание закончится. Вы должны использовать angularjs '$ перехватчик'. Лучшая реализация, которую я видел до сих пор, - это [это] (http://stackoverflow.com/questions/17838708/implementing-loading-spinner-using-httpinterceptor-and-angularjs-1-1-5). Или вы можете использовать '$ watch', чтобы увидеть, изменился ли контент, но использование' $ watch' является признаком плохой архитектуры, обычно –

+0

@babbaggeii это предложение было по существу моим ответом, чтобы начать с – scniro

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