2016-05-26 36 views
2

我試圖使用角度指令將角度函數綁定到常規js事件(logedIn事件),如here所述。將角色控制器功能的常規自定義js事件綁定

該指令代碼:

evApp.directive('onlogin', function() { 
return { 
    restrict: 'A', 
    transclude: true, 
    scope: { 
     'onlogin': '&' 
    }, 
    link:function (scope, element, attr) { 
     //Code to detect when element is pulled goes here 
     document.addEventListener("logedIn", function (e) { 
      scope.$eval(attr.onlogin); 
     }); 
    } 
} 
}); 

HTML標記是:

<div onlogin="loggedIn()"></div> 

它的工作,但我沒有找到一種方法來傳遞參數「E」是與事件到來在鏈接功能中。我試圖只從html函數處理程序傳遞,並使用鏈接函數中的參數調用函數,但它沒有奏效。 一些事情,如:

<div onlogin="loggedIn"></div> 

感謝,阿米海

+0

您應該添加範圍$ apply讓角度現在它需要激發摘要循環,然後調用scope.onlogin({e:e}); – sielakos

回答

1

onlogin功能需要匿名函數中,以添加參數調用,但功能需要被存儲在匿名函數外,否則將不火。

evApp.directive('onlogin', function() { 
    return { 
     restrict: 'A', 
     transclude: true, 
     scope: { 
     'onlogin': '&' 
     }, 
     link:function (scope, element, attr) { 
      //Code to detect when element is pulled goes here 
      document.addEventListener("logedIn", function (e) { 
      var fn = scope.onlogin(); 
      scope.$apply(function() { 
        fn(e); 
      }); 
      }); 
     } 
    } 
}); 
+0

是的,你是對的,我錯過了,因爲你的代碼複製了粘貼片段,並且你使用了attr,顯然它應該是範圍。我的錯誤是仔細閱讀代碼。 – sielakos

3

你應該添加範圍$適用於讓現在的角度,它需要火消化週期,然後只需要調用scope.onlogin({E:}。 )基本上你可以在處理程序中使用它,就像使用$ event一樣。

evApp.directive('onlogin', function() { 
return { 
    restrict: 'A', 
    transclude: true, 
    scope: { 
     'onlogin': '&' 
    }, 
    link:function (scope, element, attr) { 
     //Code to detect when element is pulled goes here 
     document.addEventListener("logedIn", function (e) { 
      scope.$apply(function() { 
      scope.onlogin({e: e}) 
      }); 
     }); 
    } 
} 
}); 
+0

它給我一個錯誤,attr.onlogin不是一個函數 – amichai

+0

我改變了attr.onlogin({e:e});到scope.onlogin({e:e});現在它的工作。謝謝。 – amichai

+0

是的,你是對的。當我複製粘貼代碼時,我犯了錯誤,應該是範圍。 – sielakos