Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何在angular.js中创建一个没有ng模型的简单文本区域?_Angularjs_Input_Binding - Fatal编程技术网

Angularjs 如何在angular.js中创建一个没有ng模型的简单文本区域?

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

在angular.js应用程序中,我有一个如下的文本区域:

{{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'];