Angular and Knockout Test

Angular and Knockout Test

by MKGaru

HTML

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.1/angular.js"></script>
<script src="http://knockoutjs.com/downloads/knockout-3.2.0.debug.js"></script>
<script src="http://mbest.github.io/knockout.punches/knockout.punches.js"></script>
<script src="https://rawgit.com/SteveSanderson/knockout-es5/master/dist/knockout-es5.js"></script>
<div id="angular" ng-app="app" ng-controller="VM as vm">
    Angular:{{vm.title}}
    <ul>
        <li ng-repeat="one in vm.data">{{vm.getDate()|  date:'EEE MMM d y H:mm:ss Z'}}</li>
    </ul>
    <button ng-click="vm.addData()">Add Data</button>
</div>
<p>↑ データを追加すると、すべての要素が再生成される</p>
<p>↓ データを追加すると、追加した要素のみが生成される</p>
<div id="knockout">
    Knockout:{{title}}
    <ul data-bind="foreach:data">
        <li>{{$root.getDate()}}</li>
    </ul>
    <button data-bind="click:addData">Add Data</button>
</div>

CSS

#angular{
    border-color: red;
}
#knockout{
    border-color: darkorange;
}

#angular,
#knockout{
    width: 500px;
    height: 250px;
    border-style:solid;
    margin: 10px;
    overflow: auto;
}

JavaScript

// Common VModel
function VM(){
    this.title = "Re-Rendering Test";
    this.data = [];
}
VM.prototype.getDate = function(){
    return new Date();
}
VM.prototype.addData = function(){
    this.data.push({});
}

// for Angular;
angular.module('app',[])
    .controller('VM',VM);

// for Knockout;
(function(){
    var koVM = new VM();
    ko.track(koVM);
    ko.punches.enableAll();
    ko.applyBindings(koVM,document.querySelector("#knockout"));
})();