37
AngularJS Jak zacząć przygodę z najpopularniejszym frameworkiem JavaScript Dariusz Kalbarczyk [email protected]

WDI AngularJS 2016

Embed Size (px)

DESCRIPTION

Warszawskie Dni Informatyki 22-23.03.2016 Warszawa - Gmach MiNI PW http://www.warszawskiedniinformatyki.pl

Citation preview

Page 1: WDI AngularJS 2016

AngularJSJak zacząć przygodę z najpopularniejszym frameworkiem

JavaScript

Dariusz Kalbarczyk

[email protected]

Page 2: WDI AngularJS 2016

”„Każdy mistrz był

kiedyś uczniem!

Page 3: WDI AngularJS 2016

Co ja tutaj robię ;)

http://goo.gl/ZFvbc8 http://goo.gl/9OUbV7

Page 4: WDI AngularJS 2016

Dlaczego warto postawić na AngularJS?1.SPA2.Dyrektywy3.Modularyzacja4.Testy

Page 5: WDI AngularJS 2016

AngularJS 1.x czy 2.0?

?

Page 6: WDI AngularJS 2016

Pierwsza aplikacja

Page 7: WDI AngularJS 2016

ng-repeat & filter

Page 8: WDI AngularJS 2016

Config

Page 9: WDI AngularJS 2016

Angular Module 1.xAngular Module

Config

Routs

View Controllers

Directives Factories

$scope

Page 10: WDI AngularJS 2016

Kontroler – JavaScript’owy konstruktor // JavaScript Constructorfunction Car(){

this.model = 'RANGE ROVER';this.price = 300000;this.engine = '3.0 V6'

}// za każdym razem kiedy otwieramy kontroler, tworzymy nową instancję

var sale = new Car();

Page 11: WDI AngularJS 2016

Klasyczne wywołanie kontroleraangular

.module('app.cars')

.controller('Car', Car);

function Car($scope){$scope.model = 'RANGE ROVER';$scope.price = 300000;$scope.engine = '3.0 V6';

}

$scope

Page 12: WDI AngularJS 2016

Składnia - Controller Asangular

.module('app.cars')

.controller('Car', Car);

function Car(){var vm = this;vm.model = 'RANGE ROVER';vm.price = 300000;vm.engine = '3.0 V6';

}

vm = this

Page 13: WDI AngularJS 2016

$scope vs VMangular

.module('app.cars')

.controller('Car', Car);

function Car($scope){ console.log(‘scope',$scope);};

Page 14: WDI AngularJS 2016

$scope vs VMangular

.module('app.cars')

.controller('Car', Car);

function Car(){var vm = this;console.log('vm ', vm);

};

Page 15: WDI AngularJS 2016

$scope$id$apply$digest$watch$broadcast$destroy$emit$eval

$new$on$parnet$root$watchCollection$evalAsync…

Page 16: WDI AngularJS 2016

Zagnieżdżanie kontrolerów<div ng-controller="Ctrl1"> {{test}} <div ng-controller="Ctrl2"> {{test}} <div ng-controller="Ctrl3"> {{test}} </div> </div> </div>

Która wartość zostanie

wyświetlona?

Page 17: WDI AngularJS 2016

Bardziej czytelnie<div ng-controller="Ctrl1"> {{ctrl1.test}} <div ng-controller="Ctrl2"> {{ctrl2.test}} <div ng-controller="Ctrl3"> {{ctrl3.test}} </div> </div> </div>

Page 18: WDI AngularJS 2016

Co się stanie? <div ng-controller="Ctrl1"> Ctrl1: {{test}} <div ng-controller="Ctrl2"> Ctrl2: {{test}} <div ng-controller="Ctrl3"> Ctrl3: {{test}} </div> </div> </div>

Page 19: WDI AngularJS 2016

Co się stanie? (function () {

angular

.module('app', []).controller('Ctrl1', Ctrl1)

.controller('Ctrl2', Ctrl2).controller('Ctrl3', Ctrl3);

Ctrl1.$inject = ['$scope'];

function Ctrl1($scope) { $scope.test="test 1"}

Ctrl2.$inject = ['$scope'];

function Ctrl2($scope) {}

Ctrl3.$inject = ['$scope'];

function Ctrl3($scope) {}

})();

Page 20: WDI AngularJS 2016

OtrzymamyCtrl1: test 1Ctrl2: test 1Ctrl3: test 1

Page 21: WDI AngularJS 2016

Co się stanie?(function () {

angular

.module('app', []).controller('Ctrl1', Ctrl1)

.controller('Ctrl2', Ctrl2).controller('Ctrl3', Ctrl3);

Ctrl1.$inject = ['$scope'];

function Ctrl1($scope) {}

Ctrl2.$inject = ['$scope'];

function Ctrl2($scope) {}

Ctrl3.$inject = ['$scope'];

function Ctrl3($scope) {$scope.test="test 3"}

})();

Page 22: WDI AngularJS 2016

OtrzymamyCtrl1: Ctrl2:Ctrl3: test 3

Dzieci chętnie korzystają z zasobów rodziców, odwrotnie to nie działa, trochę

tak jak w życiu ;)

Page 23: WDI AngularJS 2016

Controller As<div ng-controller="Ctrl1 as vm"> Ctrl1: {{vm.test}} <div ng-controller="Ctrl2 as vm"> Ctrl2: {{vm.test}} <div ng-controller="Ctrl3 as vm"> Ctrl3: {{vm.test}} </div> </div> </div>

Page 24: WDI AngularJS 2016

Co się stanie? (function () { angular.module('app', []) .controller('Ctrl1', Ctrl1.controller('Ctrl2', Ctrl2) .controller('Ctrl3', Ctrl3);

Ctrl1.$inject = ['$scope']; function Ctrl1($scope) { $scope.vm={ test : 'test 1' } };

Ctrl2.$inject = ['$scope'];function Ctrl2($scope) {}

Ctrl3.$inject = ['$scope'];function Ctrl3($scope) {} })();

Page 25: WDI AngularJS 2016

OtrzymamyCtrl1: test 1Ctrl2: Ctrl3:

Page 26: WDI AngularJS 2016

Controller As bez $scope<div ng-controller="Ctrl1 as vm"> Ctrl1: {{vm.test}} <div ng-controller="Ctrl2 as vm"> Ctrl2: {{vm.test}} <div ng-controller="Ctrl3 as vm"> Ctrl3: {{vm.test}} </div> </div> </div>

Page 27: WDI AngularJS 2016

Gdzie jest $scope?(function () { angular

.module('app', [])

.controller('Ctrl1', Ctrl1)

.controller('Ctrl2', Ctrl2)

.controller('Ctrl3', Ctrl3);

function Ctrl1() {}function Ctrl2() { var vm = this; vm.test = 'test 2';}function Ctrl3() {} })();

Page 28: WDI AngularJS 2016

OtrzymamyCtrl1:Ctrl2: test 2Ctrl3:

Nie ma $scope a jednak działa i nie jest to Angular2

Page 29: WDI AngularJS 2016

Czy można bardziej czytelnie?<div ng-controller="Ctrl1 as ctrl1"> Ctrl1: {{ctrl1.test}} <div ng-controller="Ctrl2 as ctrl2"> Ctrl2: {{ctrl2.test}} <div ng-controller="Ctrl3 as ctrl3"> Ctrl3: {{ctrl3.test}} </div> </div> </div>

Podmieniamy vm na nazwę kontrolera

Page 30: WDI AngularJS 2016

Ale nic nie zmieniamy w kodzie JavaScript! (function () { angular

.module('app', [])

.controller('Ctrl1', Ctrl1)

.controller('Ctrl2', Ctrl2)

.controller('Ctrl3', Ctrl3);

function Ctrl1() {}function Ctrl2() { var vm = this; vm.test = 'test 2';}function Ctrl3() {} })();

Tu nadal pozostaje vm

Page 31: WDI AngularJS 2016

ctrl2 jest rozpoznane jako vm<div ng-controller="Ctrl2 as ctrl2"> Ctrl2: {{ctrl2.test}}

function Ctrl2() { var vm = this; vm.test = 'test 2';

}

Page 32: WDI AngularJS 2016

Po co cała ta zabawa? Jeśli używasz tylko bindowania danych, nie musisz używać $scope!

Page 33: WDI AngularJS 2016

Co jednak gdy $scope jest potrzebny?Watro pomyśleć o przeniesieniu tej funkcjonalności poza kontroler.

Page 34: WDI AngularJS 2016

controllerAs - html<div ng-controller="Ctrl1"><div ng-controller="Ctrl1 as vm">

<div ng-controller="Ctrl1 as ctrl1">

Page 35: WDI AngularJS 2016

controllerAs - routingconfig: {

templateUrl: 'strona1.html', controller: 'Ctrl1', controllerAs: 'vm'

}

Page 36: WDI AngularJS 2016

AngularJS Warsaw & NG-Poland

http://www.meetup.com/AngularJS-Warsaw

http://ng-poland.pl

Link do prezentacji: goo.gl/B0Aicb

Page 37: WDI AngularJS 2016

Dziękuję za uwagę