2015-01-26 2 views
2

Я работаю с Angular на некоторое время. Однако сегодня мне показалось довольно странным, что attrs в моей пользовательской директиве не были связаны правильно. Вот выдержка из кода:Угловая директива смены привязки не работает в ng-repeat

<div ng-repeat="item in items"> 
    <io-map geo-location-x="item.data.x" geo-location-y="item.data.y" zoom-level="item.data.zoom"></io-map> 
</div> 

angular.directive('io-map', function() { 
    return { 
    restrict: 'EA', 
    scope: { 
     geoLocationX:'=', 
     geoLocationY:'=', 
     zoomLevel:'=' 
    }, 
    template: '<div id="map-' + Math.round(Math.random()*100000000) + '" style="height:400px"></div>', 
    link: function (scope, element, attrs) { 
     //Some logic... 
     //I checked the attrs here, and found attrs.geoLocationX and so on are just plain strings like "item.data.x", meaning they are not bound, while I can assure you that item.data.x has its value. 
    } 
    } 
}) 

Что в этом плохого? Заранее спасибо.

+0

зачем использовать 'attrs' если вы связывании с использованием' '=? Вы уже должны иметь доступ к значению с помощью 'scope.geoLocationX', а затем двухсторонняя привязка будет работать без каких-либо' $ watch'. –

+0

@DavinTryon Я просто ошибся 'scope' для 'attrs'. Ты прав. :) –

ответ

0

Использование изолированной области с привязками = не приведет к разрешению значений атрибутов с использованием attrs.

scope: { 
    geoLocationX:'=', 
    geoLocationY:'=', 
    zoomLevel:'=' 
}, 

Вы должны использовать вместо scope:

link: function (scope, element, attrs) { 
     //Some logic... 
     //use 
     var valueForGeoLocationX = scope.geoLocationX; 
    } 
+0

Как небрежно! Если бы я встретил вас раньше, часы отладки были бы сохранены. :П –

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