用ES5写Angular v2(2)中的“双向绑定”
※现在不建议使用这种方法
上次我用ES5写了一个简单的Angular v2示例程序。
让我们来试试AngularJS的特点之一:”双向绑定”。
主要的HTML与上次相比几乎没有变化。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/2.0.0-beta.17/Rx.umd.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/2.0.0-beta.17/angular2-polyfills.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/2.0.0-beta.17/angular2-all.umd.dev.js"></script>
<script src="components/hello-component/hello-component.js"></script>
</head>
<body>
<hello-component></hello-component>
</body>
</html>

由于本次不会使用app.js,所以即使为空也没有问题。
'use strict';
(function() {
})();
首先从JavaScript开始。由于在模板中直接编写会使代码变得混乱,所以我们使用templateUrl。
(function(app) {
app.HelloComponent = ng.core
.Component({
selector: 'hello-component'
})
.View({
templateUrl: 'components/hello-component/hello-component.template.html'
})
.Class({
constructor: function() {
this.name = 'world';
}
});
document.addEventListener('DOMContentLoaded', function() {
ng.platform.browser.bootstrap(app.HelloComponent);
});
})(window.app || (window.app = {}));
HTML模板的内容如下所示。
<p>Hello, {{name}} !</p>
<input type="text" [(ngModel)]="name" />
在Angular v2中,当写上[(ngModel)]=”变量名”时,关联的变量(本例中为this.name)将实现双向绑定。
顺便说一句,使用[ngModel]=”变量名”这样的写法会使其成为单向绑定,input的初始值会被传递,但如果输入文字后不会在屏幕上显示出来。
这次的示例也在Codepen上公开了。
总之
使用Angular v2的语法,可以实现双向绑定。与v1.x版本相比,它的写法非常独特,所以刚开始可能会感到困惑,但是要努力适应下去。下一次我们将进行循环处理。