KnockoutJS和AngularJS的讨论
文件
嵌りどころ等で英語必須。
公式の日本語訳が有志により存在する。
開発ドキュメントは一式揃っている。
Githubでの戦闘力が4900とナッパ並
公式のチュートリアルが秀逸で、その場でHTMLとJSを修正して動作させながら学習することができる。
Githubでの戦闘力が23000と3倍界王拳悟空並
公式のドキュメントが見辛いので、AngularJS Hubを参照するとよい
AngularJS 中心 Hub
原文: ソースコード
中文翻译: 源代码
function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");
this.fullName = ko.computed(function () {
return this.firstName() + " " + this.lastName();
}, this);
}
// Activates knockout.js
ko.applyBindings(new AppViewModel(), $("#main")[0]);
<div id="main">
<p>First name: <input type="text" data-bind="value: firstName"/></p>
<p>Last name: <input type="text" data-bind="value: lastName"/></p>
<p>Full name: <strong data-bind="text: fullName"></strong></p>
</div>
angular.module("mainModule", [])
.controller("myController", function ($scope) {
$scope.firstName = "John";
$scope.lastName = "Doe";
$scope.getFullName = function () {
return $scope.firstName + " " + $scope.lastName;
}
});
<div ng-app="mainModule">
<div ng-controller="myController">
<p>First name: <input type="text" ng-model="firstName"/></p>
<p>Last name: <input type="text" ng-model="lastName"/></p>
<p>Full name: <strong>{{getFullName()}}</strong></p>
</div>
</div>
感受
在简单的代码中,写法并没有太大的变化。但是,由于Angular甚至需要使用函数来定义,所以有必要熟练掌握Angular的规范。而在Knockout中,由于没有破坏JavaScript的写法,因此可以直观地自由编写。
例如,通过执行$controller(‘ParentCtrl’, {$scope: $scope});,可以实现继承。
如果是Knockout,只需进行扩展。
这也不会破坏与CoffeeScript的兼容性。
最後的結論
可以使用喜欢的那一方
往常胡言乱语
Angular很受欢迎,但编写方式让我有些难以接受。
感觉代码杂乱无章,以后再次检查源代码时,可能会冒出大量问号标记。
虽然有依赖注入(DI),但我觉得不需要。
从现在的角度来看,使用scope来进行通知的机制是不错的。
因为knockout会变成ko.observable()和函数,所以写起来非常困难。
如果可以使用ES5,则可以使用defineProperty来进行通知,所以knockout会更好一些。
在绑定中,Knockout默认使用focusout,而Angular默认使用keypress。哪个更好尚不清楚。
Angular的路由机制感觉很丑陋。
我觉得用Sinatra的语法会更好,但是可能因为想要使用模板所以不行吧?
Angular是一个全栈框架,如果能深入一点,可能会发现更多东西,但写法不太好,使用之后无法承担责任,感到不安。
如果对Angular的语法感觉没有异样的话,我觉得用Angular也不错。
我刚刚意识到,因为在使用DI所以代码结构如此糟糕。
我希望改用没有DI的Angular。
啊,我只是輕微使用過Angular,就被批評了。對於我來說,我更喜歡Knockout。