2014-01-10 40 views
0

我有使用ng-repeat創建的div的數量。這些div的ID都是這樣爲什麼一個元素的ID在添加指令後發生變化

id={{""+date.getDate()+"-"+date.getMonth()+"-"+date.getFullYear()+"-"+time+":00"}} 

分配,這樣一個div的ID變成這樣id="10-0-2014-00:00"

,但是當我在DIV添加droppable(custome指令),ID成爲該id="---:30"。可能是什麼問題?有沒有解決方案來避免這個問題?

可放開directive-

app.directive('droppable', function() { 
    return { 
    scope: { 
     drop: '&', 
     bin: '=' 
    }, 
    link: function(scope, element) { 
     // again we need the native object 
     var el = element[0]; 

     el.addEventListener(
     'dragover', 
     function(e) { 
      e.dataTransfer.dropEffect = 'move'; 
      // allows us to drop 
      if (e.preventDefault) e.preventDefault(); 
      return false; 
     }, 
     false 
    ); 

     el.addEventListener(
     'dragenter', 
     function(e) { 

      return false; 
     }, 
     false 
    ); 

     el.addEventListener(
     'dragleave', 
     function(e) { 

      return false; 
     }, 
     false 
    ); 

     el.addEventListener(
     'drop', 
     function(e) { 
      // Stops some browsers from redirecting. 
      if (e.stopPropagation) e.stopPropagation(); 


      var binId = this.id; 
      console.log(this) 
      var item = document.getElementById(e.dataTransfer.getData('Text')); 
      console.log(item) 
      //this.appendChild(item); 
      // call the passed drop function 
      scope.$apply(function(scope) { 
      var fn = scope.drop(); 
      if ('undefined' !== typeof fn) {    
       fn(item.id, binId); 
      } 
      }); 

      return false; 
     }, 
     false 
    ); 
    } 
    } 
}); 
+0

您是否故意要爲此指令創建自己的(獨立)範圍?如果沒有,我建議你刪除你的指令的範圍屬性。 '日期'可能不存在於你的隔離範圍內。 –

回答

1

不要在指令中使用scope:{}屬性。它將創建一個不會從父範圍繼承的全新範圍​​。這就是爲什麼日期在您的新範圍內根本不會顯示:

隔離範圍不會從父範圍原型繼承,而會創建一個全新範圍。創建此隔離範圍將確保您的指令不會混淆現有範圍。

只需刪除範圍對象,它應該按預期工作。

來源:Building custom directives

+0

是否可以在範圍對象中定義日期?或者有沒有其他的方式來做到這一點,而不刪除範圍?你的方法正在工作,我的意思是在刪除範圍後,ID正在按預期創建。但它給了我很多錯誤 –

+0

發佈它拋出的錯誤將幫助我幫助你! –

+0

有沒有什麼方法可以在該範圍內定義/添加日期 –

0

只需調用返回功能。你不需要指令的範圍。每次分配droppable指令時,它都會創建新的範圍。

相關問題