此問題出現於 ng-repeat 出來的單日期控件問題上,用的是插件,然后通過 angular 指令封裝了一下,ng-model 綁定值監聽並設置選中並回填。其實主要是多個控件一起使用會導致 ng-model 始終監聽的都是頁面綁死的那個定值,導致了各個控件的選中和回填出現混亂的 bug。
首先看到問題時就發現了多個調用監聽一個定值的問題,那么問題找到了,解決就有針對性了:只要將監聽的值改成不同的值就行了,那怎么進行將 ng-model 值區分開呢?百度了好久其實都沒查到有用的東西,查的類似:ng-model 綁定動態值。。。
后來偶爾發現有一篇文章提到了 $compile ,這個服務可以注入,主要應用為:動態加載 html 內容。眼睛一亮,這不就是我想要的實現嘛!果斷查了一下 $compile,不出所料,此服務可以使用這種方式來進行動態DOM生成:
$scope.ngModel = 'date' + new Date().getTime(); var ele = $compile("<input id='input1' ng-model=" + $scope.ngModel + ">")($scope);
然后再進行向頁面的添加:
$element.append(ele);
這樣就可以底層動態綁定不一樣的 ng-mdoel 監聽值了!
不過僅這樣也還不夠,我們最終需要動態生成元素后要插到相應的html頁面位置,那又該如何呢?查到對應對應元素后再添加,,比如我們要向一個id為 d1 的 div 添加該元素,那么可以先找到所有div:
var arr = $element.find('div');
然后移除無用 div ,直至最后一個,再進行添加操作:
for(var i = arr.length - 1; i >= 0; i--) { if(arr[i].id != 'd1') { arr.splice(i, 1); } } arr.append(ele);
至此解決 bug 問題,待續~