javascript - How to use an attribute in a directive to select data -


i'm trying make directive-element uses value of attribute make http request , prints response. part of using value of attribute make http request covered using $attrs in controller associated directive. however, if i'm trying output data 3 different attribute values in same document, directives output same data.

i have made plunker of code demonstrate problem

basically want this:

<person personnumber='person1'></person> <person personnumber='person2'></person> <person personnumber='person3'></person> 

my data example.com/{person-number}:

person 1:

 {    name: "john",    city: "new york"  } 

person 2:

 {       name: "bob",       city: "los angeles"  } 

person 3:

 {       name: "jay",       city: "san diego"  } 

wanted output:

john: new york  bob: los angeles  jay: san diego 

what get:

jay: san diego  jay: san diego  jay: san diego 

what see values have changed last http request. don't know how fix this.

here angular code (also visible in plunker):

var app = angular.module('app', []);  app.controller('personcontroller', ['$scope', '$attrs', function($scope, $attrs) {     //mock json response     var people = {       person1: {         name: "john",         city: "new york"       },       person2: {         name: "bob",         city: "los angeles"       },       person3: {         name: "jay",         city: "san diego"       }     };      //mock $http.get api url (www.example.com/{person})     var self = this;     function mockhttpgetservice() {       self.info = people[$attrs.personnumber];     }     mockhttpgetservice();   } ]);  app.directive('person', function() {     return {       restrict: 'e',       templateurl: 'template.html',       controller: 'personcontroller',       controlleras: 'person'     };   } ); 

and template:

<p>{{person.info.name}}: {{person.info.city}} </p> 

question

i think might have "scope" property of directive, have tried different versions ('=', '@', '<', '&'), not able work.

could please me?

you correct in assumption has scope property in directive. need make work:

{   restrict: 'e',   templateurl: 'template.html',   controller: 'personcontroller',   controlleras: 'person',   scope: {     personnumber:'='   } };  

updated plunker - https://plnkr.co/edit/i4anasjssq8ikggho7ek?p=preview

the reason failing before adding scope property directive descriptor, scope of surrounding template directive declared. since it's sharing scope among instances of directive, last 1 assigned assigned of them. in case person3 got assigned last person-number therefore 3 instances looking @ original scope's person-number value.

isolate scope happens when assign object scope. in case i've assigned new scope personnumber. unique scope per instance of directive.


Comments

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -