您可以创建一个微小的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(){...})
等。