简体   繁体   中英

How to pass parameters in nested controllers in Angular JS

I have a situation where I get some data from a REST API in a controller, I render that data using ng-repeat. Then in that loop, I need to run another controller, pass it data from earlier controller, do some operations on it and then again run an ng-repeat on it.

When I do it, "Inspect Element" shows value kept in parent controller's parameter. But the value which is being passed to the nested controller is actually the variable name.

Source code:

HTML:

<div class="checkbox" ng-repeat="bird in birds">
    <table>
        <tr>
            <td>
                <a ng-href="/birds/{{bird.Image}}" rel="shadowbox"><img ng-src="/birds/{{bird.Image}}" height="200" width="200"></img></a>
                <div ng-controller="imageController" model="{{ bird.AdditionalImages }}">More Images: {{ imageString }}
                    <div ng-repeat="image in images">
                        <a ng-href="/birds/{{image}}" rel="shadowbox[{{ bird.Image }}]">a</a>
                    </div>
                </div>
            </td>
            <td>
                 <table>
                     <tr>
                         <td>
                             <b>{{ bird.CommonName }}</b>
                         </td>
                     </tr>
                     <tr>
                         <td>
                             Spotted at: {{ bird.SpottedAt }}
                         </td>
                     </tr>
                 </table>
             </td>
         </tr>
    </table>
</div>

JavaScript (for nested controller):

anekchidiya.controller('imageController', function($scope, $attrs) {
    $scope.imageString = $attrs.model;
    console.log("images: " + $scope.imageString);
});

You can perform it by passing your scope into a directive, and you will create an isolated scope .

For example :

Controller

(function(){

function Controller($scope) {

  $scope.data = [{
    name: 'john',
    age: '26'
  }, {
    name: 'paul',
    age: '24'
  }, {
    name: 'titi',
    age: '32'
  }];

}

angular
.module('app', [])
.controller('ctrl', Controller);

})();

Directive

(function(){

  function customDirective() {
      return{
        restrict: 'AE',
        template: '<h3>Age : {{age}}</h3>',
        scope: {
          age: '='
        }
      };
  }

angular
  .module('app')
  .directive('customDirective', customDirective);

})();

And you can call your directive into the ngRepeat for example, by passing some data :

HTML

  <body ng-app="app" ng-controller="ctrl">

    <div ng-repeat="item in data">
      <h2>Name : {{item.name}}</h2>
      <custom-directive age="item.age"></custom-directive>
    </div>

 </body> 

So, typical usage of an isolated scope , it is in a directive that creates a complete component, a widget, etc ...

So, you will be able to build some custom components, and to pass specific data.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM