Javascript AngularJS文档准备就绪,无法运行
我试图在正在使用AngularJS打印的按钮上添加jQuery侦听器,该侦听器无法工作,因为该元素在DOM上尚不可用:Javascript AngularJS文档准备就绪,无法运行,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我试图在正在使用AngularJS打印的按钮上添加jQuery侦听器,该侦听器无法工作,因为该元素在DOM上尚不可用: var app = angular.module('myapp', []); socket.on('datasources/update:done', function () { socket.emit('datasources/list'); }); socket.emit('datasources/list'); app.factory('socket', func
var app = angular.module('myapp', []);
socket.on('datasources/update:done', function () {
socket.emit('datasources/list');
});
socket.emit('datasources/list');
app.factory('socket', function ($rootScope) {
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
},
emit: function (eventName, data, callback) {
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
})
}
};
});
function dslist($scope, socket) {
socket.on('datasources/list:done', function (datasources) {
$scope.datasources = datasources.datasources;
});
}
angular.element(document).ready(function() {
$('.delete-data-source').on('click', function(event) {
console.log('a');
})
});
HTML标记(jade):
相关HTML正文(jade):
试试这个:
$(document).on('click', '.delete-data-source', function(event) {
console.log('a');
});
但我认为你的方法是错误的。你应该有这样的东西:
<div ng-repeat="datasource in datasources">
<input type="button" ng-click="remove(datasource)" value="remove"/>
</div>
首先,angular应用程序应该绑定angular中的事件。您首先考虑的是
jQuery
,这是一种糟糕的方法。即使这是一种很好的方法,您也没有在编写的jQuery中使用事件委派。请阅读:@charlietfl这看起来很棒,现在就阅读!谢谢。当我们从角度开始。。。。甚至不要在页面中包含jQuery。使我们更容易首先开始寻找角度接近。你会惊奇地发现,实际上使用jQuery时,它的工作效率是多么的低,但出于某种原因,只需要第二次点击。。你能解释一下你的代码和我的代码之间的区别吗?区别在于我的代码正在侦听文档单击事件,然后找出单击的元素是否有。删除数据源类asigned,你的代码尝试查找类为的元素。删除数据源,但它尚未添加到dom,所以我找不到它
$(document).on('click', '.delete-data-source', function(event) {
console.log('a');
});
<div ng-repeat="datasource in datasources">
<input type="button" ng-click="remove(datasource)" value="remove"/>
</div>
$scope.remove = function(datasource){
$scope.datasources.splice($scope.datasources.indexOf(datasource), 1);
}