在我的角度中,我定义了一个范围变量$scope.letter_content
。加载视图后,我从数据库加载字符串并将其设置为$scope.letter_content
。然后,我填写了一个发短信的人(Froala),我正在使用。
以下是视图的代码:
{{letter_content}}
<div ng-if="formData['page_number'] == 1 ">
{{letter_content}}
<textarea id="froala-sample-2" froala="froalaOptions" ng-model="letter_content"></textarea>
</div>
所以基本上我将letter_content
设置为texteditor的ng-model。因此,当我对texteditor进行更改时,它会修改值$scope.letter_content
。
我发现奇怪的一点是,当我修改texteditor中的文本时,它会在div中更改{{letter_content}}
。但是,它不会在div之外更新{{letter_content}}
。
当我在texteditor中编辑文本时,我发送了一个put请求,用$scope.letter_content
更新数据库中的值。但是,它最终会在div之外发送{{letter_content}}
,最终不会更新内容。
为什么会发生这种奇怪的事情?
答案 0 :(得分:17)
我有一个非常相似甚至更奇怪的问题,我使用HTTP调用的响应更新了我的$("#sub_cat_" + cat).addClass('display');
个变量之一,令人惊讶的是,除非我进行另一个HTTP调用,否则我的视图不会更新任何其他随机HTTP调用。
使用scope
为我工作,
$apply
答案 1 :(得分:16)
实际上这已在更多链接中讨论过。
不要使用原始类型变量。而不是在范围内使用对象。
例如,
请勿使用$scope.primitiveVariale
代替此$scope.object={primitiveVariale:null}
因此,在视图中使用object.primitiveVariale
,这将反映在所有视图中。请参阅以下链接。
https://github.com/angular/angular.js/wiki/Understanding-Scopes
答案 2 :(得分:4)
ng-if
指令会创建一个新范围,因此letter_content
内的div
位于ng-if
范围内,但letter_content
外部位于test.tpxz
范围内控制器范围。
阅读API文档以了解哪个指令创建新范围。
要避免此类问题,请考虑使用controllerAs syntax
答案 3 :(得分:3)
你能听说过棱角分明的dot notation
吗?
将letter_content
放入对象中。例如froalaDetails.letter_content
。然后更新该值,一切都应该完全按照你想要的方式工作。
观看此非常短的视频,以获取完整的详细信息:https://egghead.io/lessons/angularjs-the-dot
答案 4 :(得分:3)
不要使用这样的普通值,你需要将这些值放入一个对象中,所以试试你的控制器:
$scope.obj = { letter_content: null};
然后在你看来:
{{obj.letter_content}}
答案 5 :(得分:2)
试试这个 -
$scope.object = {letter_content:null};
{{object .letter_content}}
<div ng-if="formData['page_number'] == 1 ">
{{letter_content}}
<textarea id="froala-sample-2" froala="froalaOptions" ng-model="object .letter_content"></textarea>
</div>