gpt4 book ai didi

javascript - AngularJS 中 Knockout 的可写计算可观察对象的模拟是什么?

转载 作者:可可西里 更新时间:2023-11-01 01:42:23 26 4
gpt4 key购买 nike

我在我的项目中使用 KnockoutJS,但我想学习 AngularJS,因为它有很多 Knockout 没有的好用的特性。所以我有兴趣使用 Angular 重写我的一些代码。但是我不明白如何做我在 Knockout 中使用的一些简单的事情。例如,Knockout 具有计算可观察量的功能。这个很酷!我已经发现我可以使用一个简单的函数来代替。但是 Knockout 为计算的可观察对象提供了“写入”功能,例如:

var first_name = ko.observable('John'),
last_name = ko.observable('Smith'),
full_name = ko.computed({
read: function(){
return first_name() + ' ' + last_name();
},
write: function(new_value){
var matches = new_value.match(/^(\w+)\s+(\w+)/);

first_name(matches[1]);
last_name(matches[2]);
}
});

JSFiddle 上的这段代码:http://jsfiddle.net/Girafa/QNebV/1/

此代码允许我在更改“full_name”时更新“first_name”和“last_name”可观察值。如何使用 AngularJS 完成?正在检查参数是否存在的函数?是这样的吗?

first_name = 'John';
last_name = 'Smith';
full_name = function(value){
if (typeof value != 'undefined')
{
// do the same as in the Knockout's write function
}
else
{
// do the same as in the Knockout's read function
}
}

什么是最佳实践?

最佳答案

我找到了这样的解决方案:http://jsfiddle.net/Girafa/V8BNc/

我们不使用 Angular $watch 方法,而是设置 fullName 属性的 native javascript getter 和 setter:

Object.defineProperty($scope, 'fullName', {
get: function(){
#...
},
set: function(newValue){
#...
}
})

我觉得这样更方便,因为我不需要在代码中设置任何特殊的观察者。但我不知道该解决方案的浏览器支持情况。

关于javascript - AngularJS 中 Knockout 的可写计算可观察对象的模拟是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19526938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com