Angularjs Rzeszow 18 06 2016

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

description

Jak zacząć przygodę z najpopularniejszym frameworkiem JavaScript

Transcript of Angularjs Rzeszow 18 06 2016

Page 1: Angularjs Rzeszow 18 06 2016

Jak zacząć przygodę z najpopularniejszym frameworkiem JavaScript

Dariusz [email protected]

Page 2: Angularjs Rzeszow 18 06 2016

Co ja tutaj robię ;)

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

Page 3: Angularjs Rzeszow 18 06 2016

http://ng-poland.pl

Page 4: Angularjs Rzeszow 18 06 2016
Page 5: Angularjs Rzeszow 18 06 2016

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

Page 6: Angularjs Rzeszow 18 06 2016

AngularJS 1.x czy 2.0?

?

Page 7: Angularjs Rzeszow 18 06 2016

Pierwsza aplikacja

Page 8: Angularjs Rzeszow 18 06 2016

ng-repeat & filter

Page 9: Angularjs Rzeszow 18 06 2016

Config

Page 10: Angularjs Rzeszow 18 06 2016

Angular Module 1.xAngular Module

Config

Routs

View Controllers

Directives Factories

$scope

Page 11: Angularjs Rzeszow 18 06 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 12: Angularjs Rzeszow 18 06 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 13: Angularjs Rzeszow 18 06 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 14: Angularjs Rzeszow 18 06 2016

$scope vs VMangular

.module('app.cars')

.controller('Car', Car);

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

Page 15: Angularjs Rzeszow 18 06 2016

$scope vs VMangular

.module('app.cars')

.controller('Car', Car);

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

};

Page 16: Angularjs Rzeszow 18 06 2016

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

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

Page 17: Angularjs Rzeszow 18 06 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 18: Angularjs Rzeszow 18 06 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 19: Angularjs Rzeszow 18 06 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 20: Angularjs Rzeszow 18 06 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 21: Angularjs Rzeszow 18 06 2016

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

Page 22: Angularjs Rzeszow 18 06 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 23: Angularjs Rzeszow 18 06 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 24: Angularjs Rzeszow 18 06 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 25: Angularjs Rzeszow 18 06 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 26: Angularjs Rzeszow 18 06 2016

OtrzymamyCtrl1: test 1Ctrl2: Ctrl3:

Page 27: Angularjs Rzeszow 18 06 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 28: Angularjs Rzeszow 18 06 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 29: Angularjs Rzeszow 18 06 2016

OtrzymamyCtrl1:Ctrl2: test 2Ctrl3:

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

Page 30: Angularjs Rzeszow 18 06 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 31: Angularjs Rzeszow 18 06 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 32: Angularjs Rzeszow 18 06 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 33: Angularjs Rzeszow 18 06 2016

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

Page 34: Angularjs Rzeszow 18 06 2016

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

Page 35: Angularjs Rzeszow 18 06 2016

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

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

Page 36: Angularjs Rzeszow 18 06 2016

controllerAs - routingconfig: {

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

}

Page 37: Angularjs Rzeszow 18 06 2016

AngularJS Warsaw & NG-Poland

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

http://ng-poland.pl

Page 38: Angularjs Rzeszow 18 06 2016

Dziękuję za uwagę