2016-04-21 3 views
0

Итак, у вас есть две директивы, которым необходимо обмениваться данными. Оба находятся под одним и тем же контроллером, поэтому настройте переменную $ scope.selection, чтобы сохранить выбор, он получает значение по умолчанию в контроллере.ngModel и значение сброса

knowledge.controller('industryController', function($scope, mwFactory){ 
    $scope.menudata={sections: [ 
      {group: 'FMP', name: 'Finance'}, 
      {group: 'FinTech', name: 'Financial Technology'}, 
     ] 
    } 
    if ($scope.selection) { 
     console.log("This is " + $scope.selection) 
    } else { 
     $scope.selection = 'Main_Page' 
    } 
}) 

тогда я посылаю, что в меню, где вы можете сделать выбор

<nav-circle group="section.group" ng-model="selection"></nav-circle> 

я затем установить его следующим образом внутри директивы

  function nodeclick(d){ 
       //console.log("Name is " + d.url); 
       console.log("Old model is " + ngModel.$modelValue) 
       ngModel.$modelValue = d.url; 
       ngModel.$viewValue = d.url; 
       console.log("New model is " + ngModel.$modelValue) 
      } 

Однако, это не кажется, как это обновляет или потенциально даже более странно, что что-то сбрасывает ngModel. Получил звонок дальше,

ngModel.$render = function() { 
    console.log("ngRender got called " + ngModel.$modelValue); 

}; 

И это пинает каждую минуту или около того, и всегда возвращает значение к исходному значению. Что я упускаю

+0

Можете ли вы предоставить скрипачу или plunkr для проблемы? –

+0

Кроме того, какую версию углового вы используете? – alphapilgrim

+1

Вы пробовали 'ngModelCtrl. $ SetViewValue (ngModel);' в вашей функции nodeclick? –

ответ

0

ОК, это может быть не лучшим образом, но это работает, и иногда это достаточно :)

Вместо отправки переменного я послал объект, и я думаю, что (кто-то, кто знает угловое и javascript лучше может объяснить/подтвердить), это означает, что директива будет записываться на адрес памяти, а не на переменную. Это также означает, что ng-модель не изменится (адрес памяти будет одинаковым, данные, сохраненные на этом адресе памяти, будут изменены).

Возможно, это неправильно, но решение работает так, как если бы это было так.

Таким образом, определение области видимости переменных:

$scope.selection = {}; 
$scope.selection.default = 'Main_Page' 
$scope.selection.current = ''; 

Затем отправьте директивам:

<nav-circle group="section.group" ng-model="selection.current"></nav-circle> 

И изменить переменную области действия в директиве вы только что установили viewValue

ngModel.$setViewValue(d.url); 

Как я уже говорил, я не уверен, что это правильный путь, или если я понимаю, что это корр. ect, но он работает :)

+0

nah это неправильное объяснение, если оно работает, потому что у вас есть поля-посредники, это означает, что у вас есть проблема наследования сферы. Это связано с тем, что область наследуется между ними, но наследование не работает в простом поле. Google «angularJS dot notation» для дальнейшего объяснения. – Walfrat

+0

ОК, так что правильно (ish) решение неправильная проблема :) Большое спасибо Walfrat – vrghost

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