区别: ko的subscribe vs computed vs extend

如果需要处理由值变化而引发另一个操作的场景,可以有几种方式:

(1)Subscribe在单值变化的时候使用;

(2)Computed在多个值变化的时候使用;

(3)Extend则一般定义了通用方法,可以让多个observable公用同一个extend方法,类似于C#里面的filter.

具体用法如下:

Subscribe, 该方法有3个参数:

callback是由值变化后触发的callback函数

Target:可选项,callback的this值

event可以定义callback 函数触发的事件,比如:beforeChange,默认是用change

myViewModel.personName.subscribe(function(newValue) {    alert("Theperson's new name is "+ newValue);});

PS: KO的官方文档里解释是,KO在HTML里的声明绑定(Decliaritivebinding),就是使用subscribe的机制来实现的。

既然可以显示声明subscribe,也就可以把它dispose掉

var subscription =myViewModel.personName.subscribe(function(newValue) {/* do stuff */});

// ...then later...

subscription.dispose();// I no longer want notifications

Computed:

如果在computed里面的KO对象的值有变更,都会触发computed函数执行:

functionAppViewModel(){this.firstName = ko.observable('Bob');

this.lastName = ko.observable('Smith');

}

functionAppViewModel(){

// ... leave firstName and lastNameunchanged ...

this.fullName = ko.computed(function() {

returnthis.firstName() +" "+this.lastName();

},this);}

这里,传递this是 为了在computed里读取fistName和lastName.


区别:Computed VS Pure Computed

Pure Computed只有当有其他subscriber的时候才会有这个对象,所对应的DOM对象 不激活的时候不存在,这样可以防止内存泄露,在Component等场景下不用担心dispose的问题。

如果computed里面的对象不会有其他写的操作,优先使用pure computed

文章转自这里

你可能感兴趣的:(区别: ko的subscribe vs computed vs extend)