Angular JS :)
Directives are the lord of the dance. They are essentially a configuration object that takes all the other elements, and via magic and lazers turns them into declarative html.
angular
.module('angledditApp')
.directive('subredditMenuItem', function () {
return {
templateUrl: './partials/subreddit-menu-item.html',
restrict: 'E',
scope: {
subreddit: '@',
pages: '@',
renderer: '@'
},
link: function link($scope, $el, $attrs){
//dom manipulation would be here.
},
controller: function ($scope, $state, $stateParams) {
function navigate(subreddit, pages, renderer) {
$stateParams.pages = parseInt(pages);
$stateParams.subreddit = subreddit;
$state.go('angleddit.' + renderer, $stateParams);
}
$scope.navigate = navigate;
}
};
});angular
.module('angledditApp')
.directive('subredditMenuItem', function () {
return {
templateUrl: './partials/subreddit-menu-item.html',
restrict: 'E',
scope: {
subreddit: '@',
pages: '@',
renderer: '@'
},
link: function link($scope, $el, $attrs){
//dom manipulation would be here.
},
controller: function ($scope, $state, $stateParams) {
function navigate(subreddit, pages, renderer) {
$stateParams.pages = parseInt(pages);
$stateParams.subreddit = subreddit;
$state.go('angleddit.' + renderer, $stateParams);
}
$scope.navigate = navigate;
}
};
}); <div ng-repeat="subreddit in subreddits" class=" btn btn-default">
<subreddit-Menu-Item
subreddit="{{subreddit.display_name}}"
pages="{{pages}}"
renderer = "{{renderer}}"
></subreddit-Menu-Item>
</div> controller: function ($scope, $state, $stateParams) {
function navigate(subreddit, pages, renderer) {
$stateParams.pages = parseInt(pages);
$stateParams.subreddit = subreddit;
$state.go('angleddit.' + renderer, $stateParams);
}
$scope.navigate = navigate;
}$scope
and
2 providers;
$state
and $stateParams are being injected into the controller
scope: {
subreddit: '@',
pages: '@',
renderer: '@'
}<subreddit-Menu-Item
subreddit="{{subreddit.display_name}}"
pages="{{pages}}"
renderer = "{{renderer}}"
></subreddit-Menu-Item>controller: function ($scope, $state, $stateParams) {
function navigate(subreddit, pages, renderer) {
$stateParams.pages = parseInt(pages);
$stateParams.subreddit = subreddit;
$state.go('angleddit.' + renderer, $stateParams);
}
$scope.navigate = navigate;
}Scope, is essentailly like the public members of a revealing module. Public to the template itself, and modifiable via controller and link
@ DOM attr
= 2-way scope
& expression
The Dream
Create compositable, declarative components you just drop into a page and they work
<my-totallysick-dashboard data="data" />
Implementation-wise what does this mean for you?
Not much, just use React and this happens automatically
(isnt new)
;(function ( $, window, document, undefined ) {
$.widget( "namespace.widgetName" , {
options: {
someValue: null
},
_create: function () {
this.element.addStuff();
},
destroy: function () {
$.Widget.prototype.destroy.call(this);
},
_privateMethod: function ( event ) {
console.log("_privateMethodcalled");
},
method: function ( event ) {
this._trigger("dataChanged", event, {
key: "someValue"
});
},
_setOption: function ( key, value ) {
switch (key) {
case "someValue":
//this.options.someValue = doSomethingWith( value );
break;
default:
//this.options[ key ] = value;
break;
}
$.Widget.prototype._setOption.apply( this, arguments );
}
});
})( jQuery, window, document );State
and
Lifecycle
in
jQuery UI
AnguledditComponents.Test = React.createClass({
displayName: 'test-component',
propTypes: {
optionalArray: React.PropTypes.array,
optionalBool: React.PropTypes.bool,
value: React.PropTypes.string.isRequired
},
mixins: [someMixin, anotherMixin],
//lifecyclehooks
componentWillMount: function(){},
componentDidMount: function(){},
componentWillRecieveProps: function(){},
componentWillUpdate: function(){},
componentDidUpdate: function(){},
componentWillUnmount: function(){},
shouldComponentUpdate: function(){},
//init
getDefaultProps: function () {
return {
value: 'default value'
};
},
getInitialState: function () {},
__privateFunction: function(){},
//main entry point
render: function render() {
return React.DOM({
key: 'uniquekey'
}, 'contents');
}
});State
and
Lifecycle
in
REACT
var HelloMessage = React.createClass({
render: function() {
return <div>Hello {this.props.name}</div>;
}
});
Maybe we could use them together to leverage the mutual advantages of each?
They both have strengths.
(for fabulous people)
git clone git@github.com:the-simian/OKCJS-December-2014-Angular-and-React.git
npm install
bower install
grunt serveI get to pull it all together here.