How to access parent component in angularjs 1.5 How to access parent component in angularjs 1.5 angularjs angularjs

How to access parent component in angularjs 1.5


Actually I got the answer after making following modification with the answer @gyc pointed:

JS CODE:

angular    .module('componentApp', [])    .controller('helloCtrl', function ($scope) {        $scope.names = ['morpheus', 'neo', 'trinity'];    })    .component('hello', {        transclude: true,        template: '<p>Hello I am {{parentCtrl.name}} and my name is {{parentCtrl.myName}}</p><ng-transclude></ng-transclude>',        controllerAs: 'parentCtrl',        controller: function ($scope) {            this.myName = 'Braid';        },        bindings: {            name: '@'        }    })    .component('hello1', {        template: '<p>Hello I am {{$ctrl.name}} && my parent is {{myNameFromParent}}  </p>',        controller: function ($scope) {            this.$onInit = function () {                $scope.myNameFromParent = this.parent.myName;            };        },        bindings: {            name: '@'        },        require: {            parent: '^hello'        }    });

HTML:

<html><body ng-app="componentApp">    <div ng-controller="helloCtrl">        <hello name="Parent">            <hello1 name="Child"></hello1>        </hello>        <label>List:            <input name="namesInput" ng-model="names" ng-list=" | " required>        </label>    </div></body></html>

The common mistake I was doing it was not following the nested component format and not using transclude in my parent. The rest worked fine when I made these two changes and modified my subsequent code.

P.S - The ng-list included in HTML has nothing to do with components.That was for other purpose.

@gyc - thanks for the help.Your input helped.

@daan.desmedt - I was hoping for the solution in components not directives.


To inherit with require, the components need to be nested:

<hello name="Parent"></hello><hello1 name="Child"></hello1>

instead do

<hello name="Parent">    <hello1 name="Child"></hello1></hello>

Then you can require the parent like so:

require: {    parent: '^^hello'  },