Bindings types for input parameters
'<' one-way binding - variable change is populate from parent component into nested component, but change in nested component is not populate into parent component.
'=' two-way binding - variable change is populate from parent into nested component and also from nested into parent component. This type of binding isn't recommeded to use.
'&' expression binding - this is usefull for callback events. Interprets input parameter as a statement. The component can then call the imput function.
'@' string binding - input value is used as a string not as a variable name like in previous binding types.
This tutorial is for AngularJS 1.5+
child-component.html
<div style="background: #c76b01; padding:20px"> <h2>Child component</h2> <p>One-way binding: {{model.oneWayParameter}}</p> <p>One-way binding: <input ng-model="model.oneWayParameter"/></p> <hr /> <p>Two-way binding: {{model.twoWayParameter}}</p> <p>Two-way binding change: <input ng-model="model.twoWayParameter"/></p> <hr /> <p>Expression binding <button ng-click="model.onClickParameter()">click</button></p> <p>String binding: {{model.stringParameter}}</p> </div>
child-component.js
angular .module('myApp') .component('childComponent', { templateUrl: 'components/component-bindings/child-component.html', bindings: { oneWayParameter: '<', twoWayParameter: '=', stringParameter: '@', onClickParameter: '&' }, controllerAs: 'model', controller: ['$log', function($log){ var model = this; model.$onChanges = function(changesObj) { if (changesObj.oneWayParameter && changesObj.oneWayParameter.currentValue != changesObj.oneWayParameter.previousValue) { $log.info('oneWayParameter was changed, new value => ' + changesObj.oneWayParameter.currentValue); } } }] })
parent-component.html
<div style="background: #dddddd; padding:20px"> <h1>Parent component</h1> <p> One-way variable: <br /> <input ng-model="model.oneWayVariable" /> </p> <p> Two-way variable: <br /> <input ng-model="model.twoWayVariable" /> </p> <child-component one-way-parameter="model.oneWayVariable" two-way-parameter="model.twoWayVariable" string-parameter="text" on-click-parameter="model.onClickEvent()" ></child-component> </div>
parent-component.js
angular .module('myApp') .component('parentComponent', { templateUrl: 'components/parent-component.html', controllerAs: 'model', controller: function() { var model = this; model.onClickEvent = function() { alert('On click button!'); } } })
Check Plunker: Check this AngularJS component bindings example on Plunker
Track input parameters changes
As you can seen on example above in child-component.js you can use build in event to track input parameter changes.
You can do it by using $onChanges(changesObj) event. You can compare currentValue and previousValue to get notification on value change:
function childComponentController($log){ var model = this; model.$onChanges = function(changesObj) { if (changesObj.oneWayParameter && changesObj.oneWayParameter.currentValue != changesObj.oneWayParameter.previousValue) { $log.info('oneWayParameter was changed, new value => ' + changesObj.oneWayParameter.currentValue); } } }