2016-11-03 35 views
0

In this plunk我試圖在指令中獲取一個數組,其數值在指令聲明中的<li>列表中輸入。獲取在HTML標記中輸入的指令值

鑑於此指令聲明:

<directive> 
    <ul> 
    <li id="0">xxx 0</li>   
    <li id="1">xxx 1</li>   
    <li id="2">xxx 2</li>   
    </ul> 
</directive> 

數組應該返回是這樣的:

scope.array = [ {id:0, name: "xxx 0"}, {id:1, name: "xxx 1"}, {id:2, name: "xxx 2"} ]; 

這是我嘗試(不工作):

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

angular.module('app') 
.directive('directive', function() { 
    var directive = {}; 
    directive.restrict = 'AE'; 
    directive.template = "<div>{{array}}</div>"; 
    directive.scope = true; 
    directive.link = function(scope, element, attrs) { 
     scope.array = element.find("ul")[0].children; 
    }; 
    return directive; 

}); 
+0

你只需設置陣列'li'元素的列表。你需要通過每一個,並取出id屬性和內容,創建對象,並將其推送到數組。我必須說這是一個奇怪的事情來寫一個指令,但嘿,派對。 –

回答

1

這裏是更新的plnkr http://plnkr.co/edit/QtNkOGvLMdu3w6BS3tlB?p=preview

您可以在模板中看到預期的數組。

要求JS代碼:

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

angular.module('app') 
.directive('directive', function() { 
    var directive = {}; 
    directive.restrict = 'AE'; 
    directive.scope = true; 
    directive.link = function(scope, element, attrs) { 
     var newArray = []; 
     angular.forEach(element.find('ul')[0].children, function(val) { 
     newArray.push({id: val.id, name: val.innerHTML}); 
     }); 
     scope.array = newArray; 
    }; 
    directive.template = "<div><pre>{{array|json}}</pre><span ng-transclude></span></div>"; 
    directive.transclude = true; 
    return directive; 

}); 
+0

你should't改變'directive.template',它應該只顯示陣列,不在名單 – ps0604

+0

由於內部指令某些HTML標記的發生,您的模板「

{{array}}
」替代「
  • XXX 0
  • XXX 1
  • xxx 2
'除非您的指令中沒有使用'transclude = true'和''。 –

+0

如果你只想要數組,那麼你可以在span標籤'span style ='display:none'ng-transclude>'上添加display:none。因爲ul,li標籤應該在那裏形成數組 –