ng-change对输入不起作用

时间:2016-01-20 15:45:06

标签: javascript angularjs

我是AngularJS的新手,目前正在努力解决以下问题。

正如您所见here in my plnkr我可以更改$scope.myDate.value

的值

现在的问题是,在向ng-change="barFunc()"添加<input>时,我无法在函数中使用此范围。

如何在此处使用ng-changeng-watch? 如果有人可以让我的plnkr工作,那将是很棒的。

<!DOCTYPE html>
<html ng-app="demo">
<head>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet">
    <link href="//rawgithub.com/g00fy-/angular-datepicker/1.0.3/dist/index.css" rel="stylesheet">
    <style>
      input {margin: 45px 0 15px 0;}
      pre{padding: 15px; text-align: left;}
    </style>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-4">
            <div ng-controller="foo">
                <input type="datetime" class="form-control" date-time ng-model="myDate.value"
                  ng-change="barFunc()" format="yyyy-MM-dd hh:mm:ss" placeholder="Select datetime">
                <pre>myDate: {{myDate.value}}</pre>
                <pre>myDate + " abc": {{ custom.value }}</pre>
            </div>  
        </div>
    </div>
</div>

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script src="//code.angularjs.org/1.4.8/angular.js"></script>
<script src="//rawgithub.com/g00fy-/angular-datepicker/1.0.3/dist/index.js"></script>
<script>
angular.module('demo', ['datePicker']).controller('foo',['$scope', function($scope){
    $scope.myDate = {
        value: ''
      };
      
    $scope.barFunc = function() {
      $scope.custom.value = $scope.myDate.value + " abc";
    };
}]);
</script>
</body>
</html>

3 个答案:

答案 0 :(得分:2)

在这种情况下我会使用$ watch:

在您的控制器中:

$scope.custom = {
    value : ''
};

$scope.$watch('myDate.value', function() {
    $scope.barFunc();
});

$scope.barFunc = function() {
  $scope.custom.value = $scope.myDate.value + " abc";
};

plunkr

答案 1 :(得分:2)

您必须先定义$scope.custom才能访问$scope.custom.value

答案 2 :(得分:2)

您可以设置这样的观察者:

$scope.$watch('myDate', function(oldValue, newValue) {
$scope.barFunc(newValue);  

});

但您还需要定义自定义对象:

  $scope.custom = {
    value: ''
  };

它应该有效。我不觉得这是最好的解决方案 - 我通常觉得如果我设置了观察者,因为我不明白为什么某些东西没有按预期工作,那么它就是更好地弄清楚它为什么不起作用。我明白了你正在尝试做的事情,我只是提供这个能够迅速解决问题的事情,如果这就是你所需要的。