您可以創建一個小小的directive
並從中獲取元素。 AngularJS使它非常簡單。我創建了一個名爲plugin-object
的指令。 請看下面的代碼。
工作Plunkr這裏(http://plnkr.co/edit/ji5hT95vcDIuwpEcJlVe?p=preview)
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>myApp</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
<script>
var myApp = angular.module('myApp', []);
myApp.directive('pluginObject', [function ($document) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var pluginElement = element;
var pluginContainer = angular.element('#pluginContainer');
var justTest = $('#t1');
pluginElement.bind('click', function(event){
console.log(event.target);
});
pluginContainer.bind('click', function(event){
console.log(event.target);
});
justTest.bind('click', function(event){
console.log(event.target);
});
}
};
}])
</script>
<style>
#t1 { border: 2px solid gray; background-color: #f00; }
#myPlugIn { height: 100px; width: 100px;}
#pluginContainer { border: 2px solid gray; background-color: blue; width: 200px; margin: 0 auto;}
</style>
</head>
<body ng-app="myApp">
<div id="pluginContainer">
<object id="myPlugIn" plugin-object type="application/x-myPluginType">
<param name="onload" value="pluginLoaded" />
</object>
</div>
<div id="t1">TEST</div>
</body>
</html>
你甚至可以使用jQuery指令裏面,你通常會做 - 看第三個選項pluginJQueryWay
,但我不會建議,因爲它是不是真的有必要 - 的更多的AngularJS你認爲更少,jQuery更好。 :)
還要確保你沒有嘗試從controller
實例化插件或將事件綁定到它 - 嘗試在指令內保留任何DOM操作(最佳實踐!)。
如果你得到它正確的指示將簡化你的HTML和作爲可重複使用的構建基塊在整個應用程序不依賴於任何具體的controller
或$scope
。 這是一個美麗的東西;)
如果你要綁定一些事件中,你可以使用.bind
- 檢查下面使用pluginAngularWay2
代碼:
var pluginAngularWay2 = angular.element('#t1');
pluginAngularWay2.bind('click', function(event){
console.log(event.target);
});
當然你也可以綁定到其他活動,而不是僅僅的點擊 .bind('change', function(){...})
等。
謝謝德沃。你能幫我設置插件對象的事件監聽器嗎? – bms