But do you think this is okay? After thinking about it for a long time, I feel that it is not very reliable. I hope that all brothers and sisters will not hesitate to teach me! ## Title
PHP中文网2017-05-15 17:01:32
<input id="app" my-model="text" />
var scope = {};
var input = document.getElementById('app');
This is very simple, just bind the event when compiling the instruction myModel
input.addEventListener('input', function (e) {
scope.text = e.currentTarget.value;
},false);
There are watchers and digest inside scope
scope.$$watchers = [];
scope.$$watchers.push({
key:'text',
fn: function (value) {
input.value = value;
}
});
scope.$digest = function () {
scope.$$watchers.forEach(function (watcher) {
watcher.fn(scope.text);
});
};
When we assign a value to the scope and trigger the digest, the UI will be updated simultaneously
scope.text ='zzz';
scope.$digest();
Directly assigning values to the scope will not update the UI. Angular will update the UI only when the digest is triggered. In most cases, Angular actively triggers the digest for us, giving the impression that we can just give the scope casually. The result A situation arises that you cannot understand. For example
angular.module('myApp', [])
.controller('MyCtrl', function ($scope) {
setTimeout(function () {
$scope.text = 'zzz';
}, 1000);
});
Using setTimeout directly, the result is that the UI is not updated, and we need to do the following processing
angular.module('myApp', [])
.controller('MyCtrl', function ($scope) {
setTimeout(function () {
$scope.$apply(function () {
$scope.text = 'zzz';
});
}, 1000);
});
Or use angular’s $timeout, which helps us trigger the digest
angular.module('myApp', [])
.controller('MyCtrl', function ($scope,$timeout) {
$timeout(function () {
$scope.text = 'zzz';
}, 1000);
});
巴扎黑2017-05-15 17:01:32
Let’s search. There are many articles that can help you answer your questions. Search first and then ask questions
巴扎黑2017-05-15 17:01:32
First of all, let me make a statement. I am not very familiar with the angularjs mentioned in the question, which is a bit wrong.
Knockout also has the same two-way data binding feature. It is implemented in the observer mode. After creating the observed object, when assigning value using the set method, it will also notify observers who are interested in the object. To achieve the effect of two-way data binding.
伊谢尔伦2017-05-15 17:01:32
angular1 is a dirty check. . This also brings about performance problems
迷茫2017-05-15 17:01:32
可以参考:
http://teropa.info/build-your-own-angular/build_your_own_angularjs_sample.pdf