ng-change无法处理文本输入

时间:2014-09-30 07:20:58

标签: angularjs colors angularjs-directive angularjs-ng-change

我是棱角分明的新手。在我的代码中,有一个从文本字段初始化的颜色选择器。用户更改颜色的值,我希望该颜色反映为跨度中文本的背景。它不起作用。缺少什么?

HTML:

<body ng-app="">
   <input type="button" value="set color" ng-click="myStyle={color:'red'}">
   <input type="button" value="clear" ng-click="myStyle={}">
   <input type="text" name="abc" class="color" ng-change="myStyle={color:'green'}">
   <br/>
   <span ng-style="myStyle">Sample Text</span>
   <pre>myStyle={{myStyle}}</pre>
</body>

Plunker - http://plnkr.co/edit/APrl9Y98Em0d6rxuzRDE?p=preview

然而,当我将其更改为ng-click时,它可以正常工作。

6 个答案:

答案 0 :(得分:35)

ng-change需要ng-model,

<input type="text" name="abc" class="color" ng-model="someName" ng-change="myStyle={color:'green'}">

答案 1 :(得分:4)

我遇到了同样的问题,我的模型是从另一个表单绑定的,我添加了ng-changeng-model但它仍然不起作用:

<input type="hidden" id="pdf-url" class="form-control" ng-model="pdfUrl"/>

<ng-dropzone
  dropzone="dropzone"
  dropzone-config="dropzoneButtonCfg"
  model="pdfUrl">
</ng-dropzone>

输入#pdf-url从dropzone获取数据(两种方式绑定),但是,ng-change在这种情况下不起作用。 $scope.$watch对我来说是一个解决方案:

$scope.$watch('pdfUrl', function updatePdfUrl(newPdfUrl, oldPdfUrl) {
  if (newPdfUrl !== oldPdfUrl) {
    // It's updated - Do something you want here.
  }
});

希望得到这个帮助。

答案 2 :(得分:3)

如果您想在Angular中编辑某些内容,则需要在html中插入ngModel

在你的样本中试试这个:

    <input type="text" name="abc" class="color" ng-model="myStyle.color">

你根本不需要观察变化!

答案 3 :(得分:2)

也许你可以尝试这样的事情:

使用指令

directive('watchChange', function() {
    return {
        scope: {
            onchange: '&watchChange'
        },
        link: function(scope, element, attrs) {
            element.on('input', function() {
                scope.onchange();
            });
        }
    };
});

http://jsfiddle.net/H2EAB/

答案 4 :(得分:2)

如果需要运行更复杂的逻辑,还可以将函数与ng-change事件侦听器绑定。

<div ng-app="myApp" ng-controller="myCtrl">      
        <input type='text' ng-model='name' ng-change='change()'>
        <br/> <span>changed {{counter}} times </span>
 </div>

...

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
      $scope.name = 'Australia';
      $scope.counter = 0;
      $scope.change = function() {
        $scope.counter++;
      };
});

https://jsfiddle.net/as0nyre3/1/

答案 5 :(得分:1)

首先,我正在查看你的代码而你没有任何控制器。所以我建议你使用一个控制器。 我认为你必须使用一个控制器,因为你的变量{{myStyle}}不能编译,因为2个大括号是可见的,它们不应该。

其次,您必须使用ng-model作为输入,此指令将输入的值绑定到您的变量。