2016-06-13 47 views
0

我向鏈路功能如下 -茉莉花不工作的鏈接指令的文件點擊

link:function(scope,elem,attr){ 
      $(document).on("click",function(event){ 
       var target = $(event.target); 
       if(target.is('.detailBox') || target.closest('.detailBox').length){ 
        return; 
       } 
       scope.$emit('closeDetailBox'); 
       scope.$apply(); 
      }); 
     } 

而且我對測試信號發送的茉莉TC下面給出 -

it('Some other box click', function() { 
      spyOn($rootScope, '$emit'); 
      var theboxelement = '<button class="thebox"></button>'; 
      var thebox = $(theboxelement); 
      $('body').append(thebox); 
      var spyEvent = spyOnEvent('.thebox', 'click'); 

      thebox.trigger("click"); 
      expect($rootScope.$emit).toHaveBeenCalledWith('closeDetailBox',theboxelement); 
      thebox.remove(); 
     }); 

了,emit事件應已被觸發並被捕獲,但從未被觸發。我得到錯誤 - 「期待間諜$發出已與['closeDetailBox','']調用,但它從來沒有被調用。」

我一直在處理這個問題,因爲2天,無法得到解決,請幫助!

回答

2

根據你的代碼,我認爲你需要調用鏈接函數。然後做其餘的。像mydirective.link();這將解決您所做的以下功能調用。

你或許可以檢查以下項目,如果上述方法無效 -

看看你的模塊依賴關係正確解決。

利用本地茉莉花調試。這可能是檢查流量的最簡單方法。

+0

非常感謝你!調用鏈接函數是所有必需的。現在它像一個魅力。謝謝。 –

+0

@anandpatil你能展示你如何調用鏈接函數嗎?你有沒有通過範圍,元素,attrs參數? –

+0

我只需要使用directive.link(),沒有任何參數,因爲我不需要它們在我的函數中。但如果你需要他們,你需要通過他們。 –

0

根據您的指示,您的活動將從您指示的範圍發出。你確定這會觸發$ rootScope的$ emit函數嗎?

也許你應該在$ rootScope上使用$ broadcast?

+0

我調試過並看到,在茉莉花代碼上觸發後,它並沒有在指令中輸入鏈接代碼。不知道爲什麼! –

+0

$是否與您的指令中的jQuery相關? – Paqman

+0

是的,它與jQuery相關 –