我在我的项目中使用 KnockoutJS,但想学习 AngularJS,因为它有很多 Knockout 没有的美味功能。
所以我有兴趣使用 Angular 重写我的一些代码。但我不明白如何做一些我在淘汰赛中使用的简单事情。
例如,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/ 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/ http://jsfiddle.net/Girafa/V8BNc/
我们不使用 Angular $watch 方法,而是设置 fullName 属性的本机 JavaScript getter 和 setter:
Object.defineProperty($scope, 'fullName', {
get: function(){
#...
},
set: function(newValue){
#...
}
})
认为这更方便,因为我不需要在代码中创建任何特殊的观察者。但我不知道该解决方案的浏览器支持情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)