Angular $ scope变量未更新

时间:2016-08-04 09:25:31

标签: javascript angularjs

在我的角度中,我定义了一个范围变量$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}},最终不会更新内容。

为什么会发生这种奇怪的事情?

6 个答案:

答案 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>