2016-08-03 75 views
1

所以基本上我創建了一個帶有兩個控制器的簡單應用程序。 ControllerA按鈕遞增ControllerB數字輸入,反之亦然。鍵入數字輸入後不會更新角度ng-model

問題是$scope.total沒有更新手動輸入數字輸入後,我不知道什麼是最好的方式來實現這一點。

HTML

<div ng-app="tabsApp"> 

    <div id="tabOne" class="tabcontent"> 
      <div ng-controller="tabOneController as vm"> 
      <input type="button" value="increment value in tab 2" ng-click="vm.sumar()"/> 
      <input type="number" ng-model="vm.totalB.value"> 
      </div> 
    </div> 


    <div id="tabTwo" class="tabcontent"> 
     <div ng-controller="tabTwoController as vm"> 
     <input type="button" value="increment value in tab 1" ng-click="vm.sumar()"/> 
     <input type="number" ng-model="vm.total.value"> 
     </div> 
    </div> 

</div> 

JS

var app = angular.module('tabsApp', []); 
    app.controller("tabOneController", controllerA); 
    app.controller("tabTwoController", controllerB); 
    app.service('myData', function() { 

     var data = { 
     value: 0 
     }, dataB = { 
     value: 0 
     }; 

     this.addItem = function (value) { 
     data.value = value; 
     } 

     this.getItem = function() { 
     return data; 
     } 

     this.addItemB = function (value) { 
     dataB.value = value; 
     } 

     this.getItemB = function() { 
     return dataB; 
     } 

    }); 



    function controllerA(myData){ 

     var scope = this; 
     scope.total = 0; 

     scope.sumar = function(){ 
     scope.total++; 
     myData.addItem(scope.total); 
     } 

     scope.totalB = myData.getItemB(); 
    } 

    function controllerB(myData){ 

     var scope = this; 
     scope.totalB = 0; 

     scope.sumar = function(){ 
     scope.totalB = myData 
     scope.totalB++; 
     myData.addItemB(scope.totalB); 
     } 

     scope.total = myData.getItem(); 

    } 
+0

你想不想找個顯示在前端的'$ scope.total'值或者你想在後端功能使用它? – Aron

+0

它已經顯示在前端,但是如果鍵入一個數字,然後再次單擊該按鈕,值不會更新 –

回答

2

這是基於你的代碼工作的例子:Plunker

function controllerA(myData){ 

    var scope = this; 
    scope.total = 0; 

    scope.sumar = function(){ 
    scope.total = myData.getItem().value; // added this line 
    scope.total++; 
    myData.addItem(scope.total); 
    } 

    scope.totalB = myData.getItemB(); 
} 

function controllerB(myData){ 

    var scope = this; 
    scope.totalB = 0; 

    scope.sumar = function(){ 
    scope.totalB = myData.getItemB().value; // modified this line 
    scope.totalB++; 
    myData.addItemB(scope.totalB); 
    } 

    scope.total = myData.getItem(); 

} 
+0

它現在正在工作。謝謝! –

0
scope.totalB = myData.getItemB(); // first controller 

scope.total = myData.getItem(); // second controller 

這些將被控制在加載時只調用一次。把它們放在函數裏面蘇馬爾

使用vm.total和vm.totalB代替vm.total.value和vm.totalB.value在HTML

+0

輸入值尚未更新 –

+0

檢查更新的答案。 –

0

你可以嘗試在HTML實施required ng-change="controller.functionThatIncrementsValues"

+0

我已經實現了,但沒有運氣 –

0

會是這樣的幫助:

HTML

​​

JS

var app = angular.module('tabsApp', []); 
app.controller("tabController", function() { 
    this.one = 0; 
    this.two = 0; 

    this.total = function(one, two) { 
     return one + two; 
    } 
}) 

除非你有兩個控制器和服務的特定需要,我只想把這一切都在一個控制器。目前你所擁有的是巨大的矯枉過正。

+0

我需要兩個控制器,因爲它是一個測試 –

+0

在這種情況下,您最好將兩個變量存儲在'$ rootScope'中。控制器精確地隔離了範圍,以便變量不會輕易相互衝突。 – Aron