2015-11-18 8 views
1

У меня возникли проблемы с возвратом данных из директивы в контроллер. Моя директива с изолированной областью, где я использую '=', согласно документации, иметь привязку двухсторонней привязки, но каким-то образом привязка данных к одному из них существует, но не 2 пути. Мои изменения в директиве не возвращаются к контроллеру. Некоторые код snipts:Возвращаемое значение от d3 угловой директивы к контроллеру

controller 
======== 
$scope.ap1 = "1111"; 
$scope.ap2 = "1111"; 

html 
======= 
<d3-zones 
    ng-if="vzones" 
    zone-data="vzones" 
    ap1-data="ap1" 
    ap2-data="ap2"> 
</d3-zones> 

directive 
======== 
scope: { 
zoneData: '=zoneData', 
ap1Data: '=ap1Data', 
ap2Data: '=ap2Data' 
}, 
And later in the link function, i am updating these two values on a particular event like this: 
scope.$apply(function() { 
    scope.ap1Data = somevalue; 
    scope.ap2Data = somevalue; 
}); 

В моей директиве, я использую d3, чтобы сделать некоторые прямоугольники. В ap1Data & ap2Data Я хотел вернуть идентификаторы двух прямоугольников, которые были только что вычеркнуты.

Я не знаю, что здесь происходит. Пожалуйста, дайте мне знать, можете ли вы это понять.

Спасибо, Kashif

+0

, пожалуйста, предоставьте ссылку plunkr или что-то, что может быть выявлено. – micronyks

+0

Согласен с тем, что вам нужно опубликовать рабочий пример. Это довольно простой сценарий, поэтому это должно помочь. –

+0

Я действительно понял вопрос. Позвольте мне опубликовать мое решение в качестве ответа. – Kashif

ответ

0

поведение действительно странно. Я действительно создал небольшой тестовый код, очень кстати, чтобы проверить эту проблему. Если я передаю сложный тип данных, такой как array, json или object, он работает нормально, но каким-то образом он не работает с примитивным типом данных, например числом, нулем или строкой. Так что я сделал есть, я только что заменили мои две переменные с одним объектом данных, например:

controller 
======== 
$scope.dataModel { 
    ap1: "1111" 
    ap2: "2222" 
} 

html 
======= 
<d3-zones 
    ng-if="vzones" 
    zone-data="vzones" 
    ap1-data="dataModel.ap1" 
    ap2-data="dataModel.ap2"> 
</d3-zones> 

directive 
======== 
scope: { 
zoneData: '=zoneData', 
ap1Data: '=ap1Data', 
ap2Data: '=ap2Data' 
}, 
And later in the link function, i am updating these two values on a particular event like this: 
scope.$apply(function() { 
    scope.ap1Data = somevalue; 
    scope.ap2Data = somevalue; 
}); 

, а затем передал эту DataModel в директиве, как указано выше. Теперь он работает нормально. Любые изменения в этой datModel возвращаются обратно контроллеру.

Спасибо, ребята, за то, что вы изучили его.