Вот пример превращения обоих компонентов в компоненты, вы можете оставить родительский контроллер, если хотите.Большинству людей кажется странным то, что при использовании привязки функции '&' необходимо отправить объект для параметров.Если вам не нужно возвращать параметры, это облегчает :) Надеюсь, это поможет.
Html:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>simple component example</title>
<script src="//code.angularjs.org/snapshot/angular.min.js"></script>
<script src="script.js"></script>
</head>
<body ng-app="myApp">
<parent-component></parent-component>
</div>
</body>
</html>
Javascript:
(function() {
'use strict';
angular
.module('myApp', [])
.component('parentComponent', {
controller: function() {
var ctrl = this;
ctrl.handleClick = function(id) { console.log(id) };
},
template: '<child-component click-me="$ctrl.handleClick(id)" greeting="hello"></child-component>'
})
.component('childComponent', {
bindings: { greeting: '@', clickMe: '&' },
template:`
<div>
<h1>{{$ctrl.greeting}}</h1>
<button ng-click="$ctrl.clickMe({id: '101010'})">Run Parent Function</button>
</div>
`,
controller: function() {
var ctrl = this;
console.log(this);
}
});
})();
Plunker Здесь
Обновлен код для изменения чего-либо в родительском элементе. Обратите внимание, что я изменил привязку приветствия с '@' (строковый литерал) на '<' (в одну сторонуобязательное выражение).Теперь идентификатор, отправленный обратно в родительскую функцию, будет добавлен к переменной приветствия в родительской функции, которая отправляется дочернему элементу для отображения.<strong> Я также обновил плункер
(function() {
'use strict';
angular
.module('myApp', [])
.component('parentComponent', {
controller: function() {
var ctrl = this;
ctrl.greeting = 'hello';
ctrl.handleClick = function(id) { ctrl.greeting += id };
},
template: '<child-component click-me="$ctrl.handleClick(id)" greeting="$ctrl.greeting"></child-component>'
})
.component('childComponent', {
bindings: { greeting: '<', clickMe: '&' },
template:`
<div>
<h1>{{$ctrl.greeting}}</h1>
<button ng-click="$ctrl.clickMe({id: '101010'})">Run Parent Function</button>
</div>
`
});
})();