Use $evalAsync instead of $apply to make sure ngModel gets updated once editor content changes

Currently we are using `!scope.$$phase && !scope.$root.$$phase` to avoid to call `$apply` if there is already a digest loop running. The `ngModel` binded to editor content would not get updated until users modify the content once again. If users try to access the `ngModel` binded to editor content, he would get an incorrect answer.

We can push our `ngModel` updating task into `$evalAsync` queue.It would be executed before rendering the DOM and it won't conflict with digest loop.

Attach angularjs event loop workflow.

![workflow](https://docs.angularjs.org/img/guide/concepts-runtime.png) 

Thanks.