2016-05-24 19 views
5

$compileを使用してディレクティブを作成してバインドすると、どのように変数を属性として追加することもできますか?変数はオブジェクトです。AngularJS - オブジェクトを属性として持つディレクティブをコンパイルする

var data = { 
    name: 'Fred' 
}; 

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

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

$element.append(el); 

そしてmyDirectiveが期待されるだろう:

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

私も代わり

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

をやって試してみました。

+0

'VARデータ= {}は'双方向結合を得るためにあなたのコントローラスコープに取り付けられる必要があります。あなたがハッキーにバインドする方法を気にかけなければ、 '' –

答えて

8

新しいスコープを作成してデータプロパティを設定するだけで簡単です。

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

になります。 'scope'パラメータは親スコープであり、ディレクティブに注入されるスコープではありません。 – sbaechler

関連する問題