jqLit​​e不支持通过选择器查找元素

时间:2018-12-14 13:31:18

标签: jquery angularjs webpack

我正在将AngularJS 1.5.10和jQuery 2.2.4与webpack一起使用。如建议中所述,我添加了jQuery,然后添加了AngularJS,但无法解决此问题。

我收到如下控制台错误-

我的login.conroller.ts文件看起来像

 import angular from 'angular';

(function() {
    'use strict';

    angular
        .module('demo')
        .controller('LoginController', LoginController);

    LoginController.$inject = ['$rootScope', '$state', '$timeout'];

    function LoginController ($rootScope, $state, $timeout) {
        var vm = this; $timeout(function (){angular.element('#username').focus();});
 }
})();

我的main.ts文件是

import 'jquery';
import 'angular';
import 'angular-resource';
import 'angular-animate';
import 'angular-aria';
import 'angular-cache-buster';
import 'angular-cookies';
import 'bootstrap';
import 'angular-sanitize';
import '@uirouter/angularjs';
  

[jqLit​​e:nosel] jqLit​​e不支持通过选择器查找元素!参见:http://docs.angularjs.org/api/angular.element

有人可以帮我解决吗?

2 个答案:

答案 0 :(得分:0)

问题描述含糊不清,但看起来Angular在全局范围内找不到正确的jQuery实例。加载AngularJS时,它将寻找window.jQuery,如果找不到,则返回缺少选择器功能的内置替代项。

我假设您正在使用Webpack来构建资产。如果是这样,请考虑使用expose-loader

调用:

$ npm install expose-loader --save-dev

然后在角度导入之前添加:

import 'expose-loader?jQuery!jquery';

答案 1 :(得分:0)

基于该错误,您的代码无法找到jQuery。一种替代方法是使用标准DOM API。 因此,您可以使用angular.element('#username')

来代替document.querySelector('#username');

如以下documentation for angular.element

中的注释所建议

注意:请记住,此函数将无法通过标签名称/ CSS选择器找到元素。对于按标签名称进行的查找,请改用angular.element(document).find(...)或$ document.find(),或使用标准的DOM API,例如document.querySelectorAll()。