- Switching to Angular(Third Edition)
- Minko Gechev
- 265字
- 2021-07-02 15:23:33
Classical change detection
Let's take a look at a simple example, which doesn't use any framework. Suppose, we have a model called User, which has a property called name:
class User extends EventEmitter { private name: string; setName(name: string) { this.name = name; this.emit('change'); } getName(): string { return this.name; } }
The preceding snippet again uses TypeScript. Do not worry if the syntax does not look familiar to you, we will make an introduction to the language in the next chapter.
The user class extends the EventEmitter class. This provides primitives for emitting and subscribing to events.
Now, let's define a view, which displays name of an instance of the User class, passed as an argument to its constructor:
class View { constructor(user: User, el: Element /* a DOM element */) { el.innerHTML = user.getName(); } }
We can initialize the view element as shown here:
let user = new User(); user.setName('foo'); let view = new View(user, document.getElementById('label'));
As the end result, the user will see a label with the content foo. However, changes in user will not be reflected by the view. In order to update the view when the name of the user changes, we need to subscribe to the change event and then update the content of the DOM element. We need to update the View definition in the following way:
class View { constructor(user:User, el:any /* a DOM element */) { el.innerHTML = user.getName(); user.on('change', () => { el.innerHTML = user.getName(); }); } }
This is how most frameworks used to implement their change detection before the era of AngularJS.
- Learn ECMAScript(Second Edition)
- 工程軟件開發技術基礎
- Ceph Cookbook
- Arduino by Example
- Rust編程:入門、實戰與進階
- Object-Oriented JavaScript(Second Edition)
- HTML5入門經典
- Scala編程實戰(原書第2版)
- Learning OpenStack Networking(Neutron)
- Learning Concurrency in Kotlin
- Spring MVC+MyBatis開發從入門到項目實踐(超值版)
- Everyday Data Structures
- Mastering Apache Camel
- SQL Server on Linux
- Zend Framework 2 Cookbook