2015-04-09 4 views
2

У меня есть собственный фильтр, который я использую для возврата строки html с помощью $ sce.trustAsHtml. В шаблоне/зрении я использую директиву нг-связывать-HTML и передать фильтр следующим образом:AngularJS Filter Data Binding

<div ng-bind-html="userAgent | geoCode:business"></div> 

Внутри моего фильтра у меня есть внутренняя функция, которая принимает входной сигнал, бизнес-модель, в моем случае, который принимает свойства от бизнес-модели, модели mongoosejs и генерирует отформатированную строку, которая используется для создания и HTML тег:

'<a href="some_url_i_create" ...>'+ myFormattingInnerFunction(business) +'</a>'; 

Что странно, если я использую эту функцию несколько полей возвращаются как неопределенные/пустой. Однако, если я непосредственно получаю доступ к переменным a, следует:

'<a href="some_url_i_create" ...>'+ business.prop1 + business.prop2+ ... +'</a>'; 

Затем все свойства найдены и выводятся. Есть идеи?

P.S. Модель получена через запрос AJAX, который, в свою очередь, использует mongoosejs для извлечения данных внутри углового контроллера для этого раздела.

+0

Где вы храните эту переменную бизнес? Как фильтр получает ссылку на него? – doldt

+0

Он запрашивается в контроллере и добавляется к переменной $ scope в обратном вызове. – Cole

ответ

3

Когда вы вызываете функцию, к которой вы обращаетесь к бизнес-объекту в первом событии рендеринга, когда загружаются все сценарии и происходит первая манипуляция с DOM.

Но когда вы обращаетесь к бизнес-объекту, непосредственно угловому, ставят значения в представление в первом событии рендеринга и во всех событиях дайджеста и, конечно же, в других событиях рендеринга.

Возможно, вы захотите рассмотреть возможность использования $ scope. attr в шаблоне для визуализации и вызывать метод форматированного строкового значения в обратном вызове.

В JS:

.success(function(data){ 
    business=JSON.parse(data);//Iguess 
    $scope.formatedtext= myFormattingInnerFunction(business); 
    $scope.$apply();// If you use an angular libs callback this probably not needed. 
}) 

В шаблоне:

'<a href="some_url_i_create" ...>'+ formatedtext +'</a>'; 
+0

Я дам этот выстрел и посмотрю, что произойдет. Кроме того, я слышал о $ digest и регистрировал свой фильтр, который показал, что он выполняется 4 или 5 раз. Можете ли вы описать дайджест больше или дать ссылку на документацию об этом? – Cole

+1

Вот довольно хорошее объяснение: http://www.sitepoint.com/understanding-angulars-apply-digest/ – szinter