2016-05-24 45 views
5

Quando uso $compile per creare e associare una direttiva, come posso aggiungere una variabile come attributo? La variabile è un oggetto.

var data = { 
    name: 'Fred' 
}; 

var dirCode = '<my-directive data-record="data"></my-directive>'; 

var el = $compile(dirCode)($scope); 

$element.append(el); 

E myDirective sarebbe in attesa:

... 
scope: { 
    record: '=' 
}, 
... 

ho provato a fare

`var dirCode = '<my-directive data-record="' + data + '"></my-directive>';` 

invece troppo.

+0

'data var = {}' ha bisogno di essere collegato al regolatore di portata per ottenere due vie vincolante. Se non ti interessa legare in due modi un modo hacker, devi '' –

risposta

8

È abbastanza semplice, basta creare un nuovo ambito e impostare la proprietà dei dati su di esso.

angular.module('app', []); 
 

 
angular 
 
    .module('app') 
 
    .directive('myDirective', function() { 
 
    return { 
 
     restrict: 'E', 
 
     template: 'record = {{record}}', 
 
     scope: { 
 
     record: '=' 
 
     }, 
 
     link: function (scope) { 
 
     console.log(scope.record); 
 
     } 
 
    }; 
 
    }); 
 

 
angular 
 
    .module('app') 
 
    .directive('example', function ($compile) { 
 
    return { 
 
     restrict: 'E', 
 
     link: function (scope, element) { 
 
     var data = { 
 
      name: 'Fred' 
 
     }; 
 
     
 
     var newScope = scope.$new(true); 
 
     newScope.data = data; 
 

 
     var dirCode = '<my-directive data-record="data"></my-directive>'; 
 

 
     var el = $compile(dirCode)(newScope); 
 
    
 
     element.append(el); 
 
     } 
 
    }; 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.js"></script> 
 

 
<div ng-app="app"> 
 
    <example></example> 
 
</div>

+0

Grazie, che alla fine ha fatto cadere il penny. Il parametro 'scope' è l'ambito genitore, non l'ambito che viene iniettato nella direttiva. – sbaechler