我已经为这个问题挠头一段时间了。我制作了一个文本区域,并创建了一个带有ng模型的模型。这一切都很好。我还有一个按钮,它使用纯Javascript来重置文本区域。当我点击这个按钮时,绑定就停止了,我仍然可以在另一个字段中看到我的文本,但文本区域是emtpy。我在这里重新创建了问题Fiddle。
window.onload = function () {
document.getElementById('btn').onclick = function () {
document.getElementById('textarea').value = "";
};
};
我是不是遗漏了什么,或者这不是Angular中绑定的工作方式。当我开始重新键入时,它会再次开始"侦听"并显示正确的文本。
有人有线索或以前遇到过这个问题吗?
提前谢谢。
这里有一把小提琴,它可以满足你的要求,但它非常不棱角分明。
http://jsfiddle.net/tk0a5nf1/3/
window.onload = function () {
document.getElementById('btn').onclick = function () {
var scope = angular.element(document.getElementById('textarea')).scope();
scope.txt = "";
scope.$apply();
};
};
这里有一种更有角度的方法:
http://jsfiddle.net/h4za5ta5/
<div ng-app>
<textarea id="textarea" ng-model="txt"></textarea>
<div>{{txt}}</div>
<button id='btn' ng-click='txt=""'>Reset textarea</button>
</div>
不确定为什么不使用angular重置文本区域。
您可以在控制器中没有功能的情况下使用ng-click="txt=''"
进行重置,但最好像这样使用ng-click="reset()"
。
有关演示,请参阅下面和jsFiddle上的。
var app = angular.module('myApp', []);
app.controller('MainCtrl', ['$scope', function ($scope) {
$scope.txt='';
$scope.reset = function() {
$scope.txt = '';
};
}]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.10/angular.js"></script>
<div ng-app="myApp">
<div ng-controller="MainCtrl">
<textarea id="textarea" ng-model="txt">
</textarea>
<div>{{txt}}</div>
<!--<button id='btn' ng-click="txt=''">Reset textarea</button>-->
<button id='btn' ng-click="reset()">Reset textarea</button>
</div>
</div>
<textarea id="textarea" ng-model="txt">
会变成<textarea id="textarea" ng-model="xyz.text">
在控制器中,我初始化xyz。
app.controller('MainCtrl', ['$scope', function ($scope) {
$scope.xyz = { text: '' };
initialize();
function initialize() {
$scope.xyz = { text: '' };
};
}]);