55
AngularJS Dariusz Kalbarczyk

AngularJS - Everyday

Embed Size (px)

DESCRIPTION

Kanciasty w życiu codziennym ;)

Citation preview

Page 1: AngularJS - Everyday

AngularJSDariusz Kalbarczyk

Page 2: AngularJS - Everyday

Co ja tutaj robię ;)

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

Page 3: AngularJS - Everyday

Dlaczego warto postawić na AngularJS

AngularJS

Page 4: AngularJS - Everyday

AngularJS

Chcę łatwiej.

Chcę więcej.

Chcę wygodniej.Chcę jakości.

Chcę szybciej.

Chcą się wyróżniać.

Chcę być podziwiany.

1

2

3

45

6

7

Symptomy świadczące o niedoborze Angulara w Twoim życiu

Page 5: AngularJS - Everyday
Page 6: AngularJS - Everyday
Page 7: AngularJS - Everyday
Page 8: AngularJS - Everyday
Page 9: AngularJS - Everyday
Page 10: AngularJS - Everyday
Page 11: AngularJS - Everyday
Page 12: AngularJS - Everyday
Page 13: AngularJS - Everyday
Page 14: AngularJS - Everyday
Page 15: AngularJS - Everyday
Page 16: AngularJS - Everyday
Page 17: AngularJS - Everyday
Page 18: AngularJS - Everyday
Page 19: AngularJS - Everyday
Page 20: AngularJS - Everyday
Page 21: AngularJS - Everyday
Page 22: AngularJS - Everyday
Page 23: AngularJS - Everyday
Page 24: AngularJS - Everyday

Angular Module

Angular Module

Config

Routs

View Controllers

Directives Factories

$scope

Page 25: AngularJS - Everyday

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 26: AngularJS - Everyday

Klasyczne wywołanie kontrolera

angular.module('app.cars').controller('Car', Car);

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

}

$scope

Page 27: AngularJS - Everyday

Składnia - Controller As

angular.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 28: AngularJS - Everyday

$scope vs VM

angular.module('app.cars').controller('Car', Car);

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

Page 29: AngularJS - Everyday

$scope vs VM

angular.module('app.cars').controller('Car', Car);

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

};

Page 30: AngularJS - Everyday

$scope

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

Page 31: AngularJS - Everyday

$scope

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

Page 32: AngularJS - Everyday

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 33: AngularJS - Everyday

Bardziej czytelnie

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

Page 34: AngularJS - Everyday

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 35: AngularJS - Everyday

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 36: AngularJS - Everyday

Otrzymamy

Ctrl1: test 1Ctrl2: test 1Ctrl3: test 1

Page 37: AngularJS - Everyday

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 38: AngularJS - Everyday

Otrzymamy

Ctrl1: Ctrl2:Ctrl3: test 3

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

tak jak w życiu ;)

Page 39: AngularJS - Everyday

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 40: AngularJS - Everyday

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 41: AngularJS - Everyday

Otrzymamy

Ctrl1: test 1Ctrl2: Ctrl3:

Page 42: AngularJS - Everyday

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 43: AngularJS - Everyday

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 44: AngularJS - Everyday

Otrzymamy

Ctrl1:Ctrl2: test 2Ctrl3:

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

Page 45: AngularJS - Everyday

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 46: AngularJS - Everyday

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 47: AngularJS - Everyday

ctrl2 jest rozpoznane jako vm

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

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

}

Page 48: AngularJS - Everyday

A jeśli przypiszemy vm do $scope? (function () { angular

.module('app', [])

.controller('Ctrl1', Ctrl1)

.controller('Ctrl2', Ctrl2)

.controller('Ctrl3', Ctrl3);

Ctrl1.$inject = ['$scope']; function Ctrl1($scope) { $scope.vm = this; } Ctrl2.$inject = ['$scope']; function Ctrl2($scope) { $scope.vm = this; $scope.vm.test = 'test 2'; } Ctrl3.$inject = ['$scope']; function Ctrl3($scope) { $scope.vm = this; } })();

Nie zalecane!

Page 49: AngularJS - Everyday

Oraz wrócimy do klasycznej składni

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

Page 50: AngularJS - Everyday

Otrzymamy

Ctrl1:Ctrl2: test 2Ctrl3:

Page 51: AngularJS - Everyday

Po co cała ta zabawa?

Jeśli używasz tylko bindowania danych, nie musisz używać $scope!

Page 52: AngularJS - Everyday

Co jednak gdy $scope jest potrzebny?

Watro pomyśleć o przeniesieniu tej funkcjonalności poza kontroler.

Page 53: AngularJS - Everyday

controllerAs - html

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

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

Page 54: AngularJS - Everyday

controllerAs - routing

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

}

Page 55: AngularJS - Everyday

Dziękuję za uwagę

Dariusz [email protected]://pl.linkedin.com/in/ngkalbarczyk https://www.facebook.com/dkalbarczykhttps://twitter.com/ngKalbarczykhttp://ng-poland.plhttp://www.meetup.com/AngularJS-Warsaw