Angular $ scope变量未更新

JoH*_*ksi 11 javascript angularjs

在我的角度,我定义了一个范围变量$scope.letter_content.加载视图时,我从我的数据库加载字符串并将其设置为$scope.letter_content.然后,我填写我正在使用的texteditor(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>
Run Code Online (Sandbox Code Playgroud)

所以基本上我设置letter_content为texteditor的ng-model.因此,当我对texteditor进行更改时,它会修改该值$scope.letter_content.

我发现奇怪的一件事是,当我修改texteditor中的文本时,它会{{letter_content}}在div内部发生变化.但是,它不会{{letter_content}}在div之外更新.

当我在texteditor中编辑文本时,我发送一个put请求来更新数据库中的值$scope.letter_content.然而,它最终发送{{letter_content}}到div之外,最终没有更新内容.

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

Sau*_*mil 24

我有一个非常相似甚至更奇怪的问题,我scope使用HTTP调用的响应来更新我的一个变量,令人惊讶的是,除非我进行另一个HTTP调用,否则我的视图不会更新,而另一个我的意思是任何其他随机HTTP调用.

使用$apply为我工作,

$scope.$apply(function () {
     $scope.resultData.totalResults = response.data.total;
});
Run Code Online (Sandbox Code Playgroud)

  • `。$ applyAsync`甚至可以防止错误:[$ rootScope:inprog] (2认同)

小智 17

实际上这已在更多链接中讨论过.

不要使用原始类型变量.而不是在范围内使用对象.

例如,不要使用like $scope.primitiveVariale而不是this$scope.object={primitiveVariale:null}

所以在视图中使用就像object.primitiveVariale那时这将反映在所有视图中.请参阅以下链接.

https://github.com/angular/angular.js/wiki/Understanding-Scopes


fan*_*ama 5

ng-if指令创建一个新的作用域,因此letter_content内部divng-if作用域中,而letter_content外部在控制器作用域中。

阅读API文档,以了解哪个指令创建了新作用域。

为避免此类问题,请考虑使用controllerAs语法


Ant*_*pod 5

不要使用这样的普通值,您需要将这些值放入对象中,因此请在控制器中尝试:

$scope.obj = { letter_content: null};
Run Code Online (Sandbox Code Playgroud)

然后在你看来:

{{obj.letter_content}}
Run Code Online (Sandbox Code Playgroud)