2015-05-19 4 views
-1

Я сделал службу, которая хранит переменную, которую я использую в двух контроллерах.Почему я не могу изменить значение переменной? Angular

function CommonVariables() { 
    var number = 3; 

    return { 
     setNumber: function(num) { 
      number = num; 
     }, 
     getNumber: function() { 
      return number; 
     } 
    } 
}; 

Проблема заключается в том, что я могу получить эту переменную так:

this.number = CommonVariables.getNumber(); 

Я хочу, чтобы это было изменено следующим образом:

<input class="numInput" ng-model="Ctrl.number"> 

в Js:

function Controller(CommonVariables) { 
    this.number = CommonVariables.getNumber(); 
    CommonVariables.setNumber(this.number); 
} 

Но я не могу и не понимаю, почему

+2

У вас нет никакой логики, которая использует '' CommonVariables.setNumber' после this.number' изменений ... –

+0

это все код в nit угловой. – user3227295

ответ

2

Вам необходимо не только обновить переменную в контроллере, но и отправить это обновление обратно службе, из которой она может быть передана любой другой части вашего приложения.

================================================================================================================================== =======

редактировать: рабочий код для меня - проверить логи консоли, как вы запустите его:

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script> 
<body> 

<div ng-app="myApp" ng-controller="Ctrl"> 
    <input class="numInput" ng-model="number" ng-change="changeNumber()"> 
</div> 

</body> 
<script type="text/javascript"> 
    var app = angular.module('myApp', []); 
    app.controller("Ctrl", function(CommonVariables, $scope){ 
     //this will initially set it as the same number as is stored in CommonVariables 
     $scope.number = CommonVariables.getNumber(); 

     //this is the function that will actually send that number back to the service to update it there 
     $scope.changeNumber = function() { 
      console.log("Number set:", $scope.number); 
      CommonVariables.setNumber($scope.number) 
      console.log("Number retrieved after setting:", CommonVariables.getNumber()); 
     } 
    }) 
    .factory("CommonVariables", function(){ 
      var number = 3; 

      return { 
       setNumber: function(num) { 
        number = num; 
       }, 
       getNumber: function() { 
        return number; 
      } 
     } 
}) 
</script> 
+1

Это должен быть комментарий ... – War10ck

+2

да да, я пишу код, дайте мне минуту ... – BIU

+0

Не работает :( –

0

вы должны $watch свойство number в области контроллера.

Вводят $scope и использовать

function Controller(CommonVariables, $scope) { 

    $scope.$watch(angular.bind(this, function() { 
     return this.number; 
    }), function (newVal) { 
     CommonVariables.setNumber(newVal); 
    }); 
... 

Глядя на ваш код при условии, что вы используете controller as синтаксис

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