Angularjs 如何在angular.js中创建一个没有ng模型的简单文本区域?
在angular.js应用程序中,我有一个如下的文本区域:Angularjs 如何在angular.js中创建一个没有ng模型的简单文本区域?,angularjs,input,binding,Angularjs,Input,Binding,在angular.js应用程序中,我有一个如下的文本区域: {{model.content} 用户编辑textarea中的内容,然后单击一个按钮,此时我记录model.content的当前(以前)值,然后用textarea的当前文本更新它 但是,textarea一旦触发onchange事件(因为它是一个双向绑定),就会立即更新model.content。单击按钮时,model.content已经包含textarea的文本,我没有model.content以前值的记录 问题–如何停止angular
{{model.content}
用户编辑textarea中的内容,然后单击一个按钮,此时我记录model.content的当前(以前)值,然后用textarea的当前文本更新它
但是,textarea一旦触发onchange事件(因为它是一个双向绑定),就会立即更新model.content。单击按钮时,model.content已经包含textarea的文本,我没有model.content以前值的记录
问题–如何停止angular更新模型?我不希望在单击按钮之前更新模型。如你所见,我根本不需要双向装订。但是,textarea指令需要ng模型。我尝试创建自定义指令,但angular仍然将任何textarea标记视为需要双向绑定的指令,而不是未知的html标记。您可以使用
angular.copy()
实用程序克隆(复制)模型并创建新实例
见文件
HTML
<div ng-controller="fessCntrl">
<div class="text-area-container">
<textarea rows="2" ng-model="textModel"></textarea>
</div>
<button ng-click="commit(textModel);">Commit</button>
<pre>copy: {{copy|json}}</pre>
</div>
演示您正在反向操作。当用户完成编辑值(并且原始内容已被修改)时,您不应尝试保存原始内容,而应在填充模型并显示页面时,在用户进行保存之前保存原始内容
另外,您不需要在文本区域内使用
{{model.content}
。您可以自己创建一个双向绑定
您将保留一个局部变量localContent
,它将保存textarea
的内容。然后在按钮上设置回调,该按钮将设置model.content=localContent
。
此外,在实际的
模型.content上设置$watch
,并在原始模型更改时更新localContent
实际上,每次击键时都会更新模型,粘贴等问题是,如果用户只编辑文本区域而不单击按钮,模型仍会更新…是的,但这不是问题,因为您制作了备份副本。当然,您也可以选择将textarea绑定到副本,而不修改模型。重要的是在包含原始值的范围内有一个值,另一个绑定到textarea,包含修改后的值。漂亮!谢谢你这么快就修好了。我刚刚添加了ng init:{{temp}}
来用我需要的值初始化textarea。工作原理与单向绑定非常相似。(我希望我能对你的答案投赞成票)
var fessmodule = angular.module('myModule', []);
fessmodule.controller('fessCntrl', function ($scope) {
$scope.copy = '';
$scope.commit = function (textModel) {
$scope.copy = angular.copy(textModel);
};
});
fessmodule.$inject = ['$scope'];