angular 動態加載 ng-model 監聽值


  此問題出現於 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 問題,待續~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。