如何在更改值后立即发布范围变量?

时间:2016-07-05 13:11:18

标签: javascript angularjs

我正在学习Angularjs并希望使用$ http.post()方法。 在HTML中      在Javascript中

$scope.onevariable ='value1'
  $scope.doSomething = function(){
     $scope.onevariable = 'value2'; 
     $http.post('someurl',{onevariable:$scope.onevariable }).then(function(){...})}

问题是我想将更改后的$ scope.onevariable作为参数发布到服务器,并且在单击按钮后必须更改此变量。但是,这个$ scope.onevariable可以在更改为' value2'之前发布,所以如何在更改值后准确发​​布它。 '值2'对我来说是未知值,或者是加密字符串,您可以将其视为随机字符串。

2 个答案:

答案 0 :(得分:2)

好吧,我不知道我是否理解你的问题,但这里有一段代码:

var app = angular.module('app', []);

app.controller('mainCtrl', function($scope) {
  $scope.onevariable ='';
  $scope.post = false;
  var increment = 0;

  $scope.changeVar = function() {
    $scope.onevariable = 'value' + ++increment;
  }

  $scope.$watch('onevariable', function(newValue, oldValue) {
    if (newValue != oldValue && newValue == 'value2') {
       doPost();
    }
  });

  function doPost () {
    // post
    $scope.post = true;
  }
});
<!DOCTYPE html>
<html ng-app="app">

<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>
</head>

<body ng-controller="mainCtrl">
  <button ng-click="changeVar()">Click me</button>
  <hr ng-if="onevariable" />
  <code ng-bind="onevariable"></code>
  <hr />
  <code ng-bind="'Post? ' + post"></code>
</body>

</html>

答案 1 :(得分:1)

我认为$ watch会是一个选项

$scope.$watch('onevariable', function(newValue, oldValue) {
  $http.post('someurl',{onevariable:newValue }).then(function(){...})}
});

More about $watch