で探して私はディレクティブの属性としてmentionnedキーからスコープデータに含まれる連想配列の対応する文字列を含むHTMLのテンプレートを返す必要がありAngularJSディレクティブを作成しようとしています。AngularJS指令は連想配列
私はコードスニペットがより明確になると思う:
範囲での私の連想配列:
ディレクティブが呼び出すされますどのように{"mapData":
{"menu1":"Apples",
"menu2":"Strawberries"}}
:あるべき
<div ng-controller="menuAngularController">
<menu-dir menuData="menu1"></menu-dir>
</div>
HTMLを角度の解釈後に返さ:
<li dropdown class='dropdown dropdown-fw'>
<a href='#' class='dropdown-toggle' dropdown-toggle>Apples
<span class='caret'></span>
</a>
<ul class='dropdown-menu' role='menu' ng-transclude></ul>
</li>
ノー説得力の結果で、働いているディレクティブ:
angular.module('Module.Directives',[]).directive('menuDir', function(){
restrict:'E',
̶t̶r̶a̶n̶c̶l̶u̶d̶e̶ transclude:true,
replace:true,
scope:{
menuData:'@'
},
template :"<li dropdown class='dropdown dropdown-fw'><a href='#' class='dropdown-toggle' dropdown-toggle>"+
"{{test}} <span class='caret'></span></a>"+
"<ul class='dropdown-menu' role='menu' ng-transclude></ul></li>",
link:function(scope, elem, attrs, controllers ̶,̶ ̶$̶s̶c̶o̶p̶e̶) {
//I put $watch because my AngularJS controller load data from an external service, so I listen change on data loaded
scope.$watch('menuData', function(newValue, oldValue){
//I get the data of the array by the id
scope.test = "{{mapData['"+newValue+"']}}";
});
});
角度コントローラ:
angular.module('MenuAngular.Controller', [])
.controller('menuAngularController', MenuAngularController);
MenuAngularController.$inject = ['menuAngularServices', '$scope'];
function MenuAngularController(menuAngularServices, $scope){
//the service (tested, all is ok on this side) that return the data on a map
menuAngularServices.initMenu.query({},function(data){
$scope.mapData= data.mapMessages;
},
function(error){
console.log(error);
});
は実は、私は{{地図データ[メニュー1]}}」を得るために成功"画面には表示されますが、Angularの値には置き換えられません。
誰もがアイデアを持っていますか? (私の英語レベルについて申し訳ありませんが、事前に感謝します!)を
を指示(私はそこにそれを見ることはありません)、あなたは試みることができますscope.test = mapData [newValue]; – rrd
コントローラのコードを追加するために投稿を編集します。値は$ scope(親スコープ)にあり、スコープにはありません。 –