Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AngularJS isolate scope with collection does not work

I want to use multiple instances of the same directive to render a collection. I am using an isolate scope to map an array to a name in the isolate scope. The link function in the isolate scope correctly sees the mapped array, however ng-repeat in it does not work.

<html ng-app="MyApp">
  <head>
    <script type="text/javascript" src="angular.js"></script>
    <script type="text/javascript">
    var MyCtrl = function($scope) {
      $scope.blah = [1,2,4,5];
      $scope.bar = [14,52,64,25];
    }
    angular.module("MyApp", [])
    .directive("sephBlah", function($parse) {
        return {
          scope: {
            tags: "=sephBlah"
          },
          link: function(scope, elem, attrs) {
            console.log(scope.tags[0]);
          }
        }
    });
    </script>
  </head>
  <body ng-controller="MyCtrl">
      <div seph-blah="blah">
        <p data-ng-repeat="t in tags">{{t}}</p><!-- why this renders nothing? -->
      </div>

      <div seph-blah="bar">
        <p data-ng-repeat="t in tags">{{t}}</p><!-- why this renders nothing? -->
      </div>
  </body>
</html>

I am not sure why the ng-repeat renders nothing. The link function correctly sees the arrays.

like image 578
JanosM Avatar asked Jul 16 '26 11:07

JanosM


1 Answers

You're not supposed to use directives like this. The sort of functionality you're trying to get here should be done with a controller.

When using directives, use the template or templateUrl attribute to provide content. So this will work:

.directive("sephBlah", function($parse) {
    return {
      scope: {
        tags: "=sephBlah"
      },
      template: '<p data-ng-repeat="t in tags">{{t}}</p>',
      link: function(scope, elem, attrs) {
        console.log(scope.tags[0]);
      }
    }
});

And in the html just do:

<div ng-attr-seph-blah="blah"></div>
like image 71
wvdz Avatar answered Jul 19 '26 19:07

wvdz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!