我是棱角分明的新手。在我的代码中,有一个从文本字段初始化的颜色选择器。用户更改颜色的值,我希望该颜色反映为跨度中文本的背景。它不起作用。缺少什么?
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
时,它可以正常工作。
答案 0 :(得分:35)
ng-change需要ng-model,
<input type="text" name="abc" class="color" ng-model="someName" ng-change="myStyle={color:'green'}">
答案 1 :(得分:4)
我遇到了同样的问题,我的模型是从另一个表单绑定的,我添加了ng-change
和ng-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();
});
}
};
});
答案 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++;
};
});
答案 5 :(得分:1)
首先,我正在查看你的代码而你没有任何控制器。所以我建议你使用一个控制器。
我认为你必须使用一个控制器,因为你的变量{{myStyle}}
不能编译,因为2个大括号是可见的,它们不应该。
其次,您必须使用ng-model作为输入,此指令将输入的值绑定到您的变量。