Javascript 关闭模式不会清除textarea数据,但会清除模型
我有一个简单的模态,其中包含一个文本区域。我的问题是重置textarea的数据 以下是我的观点:Javascript 关闭模式不会清除textarea数据,但会清除模型,javascript,html,angularjs,twitter-bootstrap,Javascript,Html,Angularjs,Twitter Bootstrap,我有一个简单的模态,其中包含一个文本区域。我的问题是重置textarea的数据 以下是我的观点: <div class="modal fade" ng-controller="MyCtrl"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> </div>
<div class="modal fade" ng-controller="MyCtrl">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
</div>
<div class="modal-body">
<textarea ng-model="content" ng-change="statusChange(content)" placeholder="update" required="required"></textarea>
</div>
</div>
<div class="modal-footer">
<a class="btn" data-dismiss="modal" aria-hidden="true" ng-click="reset()">
Cancel
</a>
</div>
</div>
</div>
我的问题是:我通过ng模型将textarea中的数据绑定到内容,但是如果我在文本区域中输入内容,然后关闭模式,我们会得到$scope.content=,但是,当我重新打开模式时,textarea仍然包含以前输入的数据。我可以通过打印内容的数据来确认,文本区域中的数据与$scope.content的值不同
当模式重新打开时,如何强制文本区域具有相同的$scope.content值
这里是问题的一个小插曲。要查看问题,请打开模式,在文本区域中键入内容,然后单击关闭按钮。注意控制台输出,它应该显示您键入的内容,后跟空字符串。现在重新打开模式,您将看到最后键入的内容是文本区域中的内容。另外请注意,然后重新打开窗口,$scope.content中的当前数据将显示在控制台中,因为它是空的。您需要将内容放入范围内的对象中
我更新了,它的工作。使用$scope.modal.content代替$scope.content。有关更多信息,请参阅。可以找到更详细的解释,但它基本上与javascript中的原语工作方式和范围共享有关
ng model是一个指令,它创建另一个作用域,并将父作用域上的属性“=”绑定到textbox或textarea的值,或select等。当该属性是基元时,它将按值传递,并复制到内部作用域。因为对象是通过引用传递的,所以当属性嵌套时这不是问题,因为对对象的引用是通过引用传递的
当您在Your's reset方法中直接写入到您的scope上的内容时,它将替换写入控制器的$scope上的值,而不是ng model指令,以及停止同步。但是,如果将ng模型绑定到对象,则在本例中,当您写入内容modal.content时,您正在读取modal并写入其内容属性。该值将被替换,但由于您的ng模型绑定到modal而不是直接绑定到内容,因此绑定不会被破坏—您只读取modal,没有写入modal。您的ng控制器属性缺少结束引号。不能肯定这是问题所在,但如果这些函数没有运行,我们无法确定它们是否来自您的帖子,很可能是……哎呀,在创建包含相关信息的小片段时,这是一个输入错误。代码关闭窗口,我可以验证$scope.content在调用后是否为空。tbh我无法将其加载到JSFIDLE或我的本地计算机中。您正在使用的JSFIDLE将非常受欢迎。我对JSFIDLE很陌生,有没有办法让它使用bootstrap?左侧有一个外部资源选项卡,您可以使用它包含bootstrap。话虽如此,我不认为任何人会介意这个例子没有风格:谢谢你的帮助,这对我很有用,它帮助我了解了更多关于angular的知识。我是angular的新手,我正在努力将一个站点从主干转换为angular。很高兴我能帮上忙。在阅读了这些链接之后,我变得足够熟悉,可以更好地在我的答案中解释这个问题。希望能有帮助
myApp.controller('MyCtrl', function($scope){
$scope.content="";
$scope.statusChange = function(param){
$scope.content = param;
}
$scope.reset = function(){
$scope.content = "";
}
})