In my angular, I define a scope variable $scope.letter_content
. When the view is loaded, I load string from my database and set it to $scope.letter_conten
Actually this has been discussed in more links.
Don't use primitive type variable. Instead of that use object in scope.
For example,
Don't use like $scope.primitiveVariale
instead of this $scope.object={primitiveVariale:null}
So in view use like object.primitiveVariale
then this will be reflect in all the view. Please see the following links.
https://github.com/angular/angular.js/wiki/Understanding-Scopes
The ng-if
directive create a new scope, so the letter_content
inside the div
is in the ng-if
scope, but the letter_content
outside is in the controller scope.
Read the API doc to know which directive create new scope.
To avoid this kind of problem consider using the controllerAs syntax
Try this -
$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>
I had very similar but even weirder problem where I was updating one of my scope
variables using the response from an HTTP call, surprisingly, my view will not update unless I make another HTTP call and by another I mean any other random HTTP call.
Using the $apply
worked for me,
$scope.$apply(function () {
$scope.resultData.totalResults = response.data.total;
});
can you ever heard of angular's dot notation
?
put letter_content
in an object. froalaDetails.letter_content
for example. then update that value and everything should work exactly like you want.
watch this very short video to get the full details: https://egghead.io/lessons/angularjs-the-dot
Do not use plain values like this, you need to put such values into an object, so try in your controller:
$scope.obj = { letter_content: null};
and then in your view:
{{obj.letter_content}}