2016-04-21 96 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

OK,這可能不是最好的方式,但它的作品,有時是不夠:)

而不是發送可變我發送的對象,我覺得(人誰知道角度和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); 
指令

正如我所提到的,我不確定這是否是正確的方式,或者我的理解是否正確等,但它的作品:)

+0

nah這是錯誤的解釋,如果因爲您有中介字段而工作,這意味着您有範圍繼承問題。這是因爲範圍在它們之間繼承,但繼承在簡單字段上不起作用。谷歌'angularJS點符號'作進一步解釋。 – Walfrat

+0

好,那麼正確(ish)解決方案錯誤的問題:)非常感謝你Walfrat – vrghost