2016-09-18 105 views
0

我想要一個指令,它把ngrange取代爲[ - 3,3]到ng-options。角度不正確的編譯選項

不幸的是下面的解決方案是不好

<html lang="pl"> 
<head> 
    <title>Its directive range</title> 
</head> 
<body> 
    <div ng-app="app">  
     <div ng-controller="AppCtrl"> 
      <select ng-model="value" range="[-3, 3]"></select> 
      <span>{{value}}</span> 
     </div> 
    </div>  

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> 
    <script type="text/javascript"> 
     angular.module('directives', []); 

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

     angular.module('app').controller('AppCtrl', function($scope) { 
      $scope.value = 2; 
     }); 

     angular.module('directives').directive('range', function($compile) { 
      return { 
       restrict: 'A', 
       scope: { 
        range: '=' 
       }, 
       link: function(scope, elem, attr) { 
        scope.options = []; 

        for(var i = scope.range[0]; i <= scope.range[1]; ++i) { 
         scope.options.push(i); 
        } 

        elem.attr('ng-options', 'o as o for o in options track by o'); 

        elem.removeAttr('range'); 

        $compile(elem)(scope); 
       } 
      }; 
     }); 
    </script> 
</body> 

後創建NG選項標籤選擇包含期權價值= 「號:2」,而不是選擇值2 ...

+0

我創建plunker你的代碼,但不能複製上述問題,呈現的HTML是: – Andriy

+0

plunker:http://plnkr.co/edit/W0Uz9t4bnGh6feVqBYP4?p=preview – Andriy

+0

我在控制器中設置$ scope.value = 2,但它沒有選擇選項...並創建了值爲「number:2」的選項... – smiady

回答

0

ng-options指令可以選擇不同類型的變量,它可以選擇混合類型,如:

<select name="mydata" 
     ng-model="number" 
     ng-options="value.a || value for value in ['-10', -5, 0, 5,'10',{a: '20'},'25']"> 

其中第一,第五和最後一個項目是STRING秒,一個項目前的最後是OBJECT和物品的其餘部分是NUMBER秒。在HTML這些選項呈現像:

<select name="mydata" 
     ng-model="number" ng-options="value.a || value for value in ['-10', -5, 0, 5,'10',{a: '20'},'25']"> 
    <option label="-10" value="string:-10">-10</option> 
    <option label="-5" value="number:-5">-5</option> 
    <option label="0" value="number:0">0</option> 
    <option label="5" value="number:5">5</option> 
    <option label="10" value="string:10" selected="selected">10</option>  
    <option label="20" value="object:8">20</option> 
    <option label="25" value="string:25">25</option> 
</select> 

到不同類型之間,用分號類型本身的值之前加入,如number:5object:4,這些類型的前綴,通過該被更新NG-模型忽略正確的,請參閱plunker http://plnkr.co/edit/THIriUsSRMV3PPGvd8oN?p=preview

我改變了你的號碼範圍爲字符串的範圍,使其類似於天然HTML選擇元素:

for (var i = scope.range[0]; i <= scope.range[1]; i++) { 
    scope.options.push((i).toString()); 
} 

類型前綴在這種情況下省略了,只在初始加載有<option value="? string:2 ?"></option>元,其中在第一次手動選擇後被刪除。

+0

在第一次手動選擇之前,有值爲string的選項:2。我試着找到解決這個問題的方法,或許在Angular中存在用於手動選擇的方法?P – smiady

+0

我嘗試了ngModelController。$ render()和jQuery.val()。trigger('change'),但沒有成功... – Andriy