我正在使用Webpack构建一个Angular 1.4项目。该项目利用了几个jQuery插件,这些插件被包装成angular指令。这些指令在内部使用angular.element
,这可能意味着angular.element是真正的jQuery,而不是jQLite。
我想让angular自动检测jQuery并使用它而不是jQLite。我尝试在入口点模块app.js
:require('jquery')
中本地要求jquery,并使用require(expose?$!expose?jquery!jquery)
全局公开jquery。
尽管如此,无论我做什么,angular.element
都引用了JQLite。
我的研究有几个结果:
详细信息:下面是我的app.js
:
'use strict';
require("expose?$!expose?jQuery!jquery");
require("metisMenu/dist/metisMenu");
require("expose?_!lodash");
require("expose?angular!angular");
import angular from "angular";
import "angular-animate";
import "angular-messages";
import "angular-resource";
import "angular-sanitize";
import "angular-ui-router";
import "bootstrap/dist/css/bootstrap.css";
import "font-awesome/css/font-awesome.css";
import "angular-bootstrap";
require("../assets/styles/style.scss");
require("../assets/fonts/pe-icon-7-stroke/css/pe-icon-7-stroke.css");
// Import all html files to put them in $templateCache
// If you need to use lazy loading, you will probably need
// to remove these two lines and explicitly require htmls
const templates = require.context(__dirname, true, /\.html$/);
templates.keys().forEach(templates);
import HomeModule from "home/home.module";
import UniverseDirectives from "../components/directives";
angular.module("Universe", [
"ngAnimate",
"ngMessages",
"ngResource",
"ngSanitize",
"ui.router",
"ui.bootstrap",
HomeModule.name,
UniverseDirectives.name,
])
.config(function($urlRouterProvider, $locationProvider, $stateProvider){
// $urlRouterProvider.otherwise('/');
// $locationProvider.html5Mode(true);
$stateProvider
.state('test', {
url: "/test",
template: "This is a test"
});
});
我从John-Reilly那里得到了这个答案:
webpack angular和jquery的神秘案例
Bob-Sponge的回答不太正确--Provide插件实际上是在它处理的模块上进行文本替换,因此我们需要提供window.jquery
(这是angular正在寻找的),而不仅仅是jquery
。
在webpack.config.js
中,需要将以下条目添加到插件中:
new webpack.ProvidePlugin({
"window.jQuery": "jquery"
}),
这使用了webpack ProvidePleugin,并且在WebPackication(©2016年John Reilly)时,代码中对window.jQuery的所有引用都将替换为对包含jQuery的webpack模块的引用。因此,当您查看捆绑文件时,您将看到检查window
对象是否有jQuery
的代码如下所示:
jQuery = isUndefined(jqName) ?
__webpack_provided_window_dot_jQuery : // use jQuery (if present)
!jqName ? undefined : // use jqLite
window[jqName]; // use jQuery specified by `ngJq`
这是对的;webpack为Angular提供了jQuery,但仍然没有将jQuery
变量放置到窗口
上。很漂亮吧?
我想要的操作:如果需要,在子表中插入一行会自动在父表中插入一行,否则将父表中现有行的id用作子表中插入行的外键。 我想知道是否有任何方法可以使用一个语句。 我使用Hibernate与Java和SQLite。以下是我关于数据库和配置的详细信息: 表家长: 表儿童: POJO家长: POJO儿童: 父母亲哈佛商学院: 小孩哈佛商学院: 现在,如果父项(具有相同的“描述”)不存在,则父项将与子项一起插入
问题内容: 在Angular 1中,通过检查$ scope层次结构来进行更改检测。我们将在模板,控制器或组件中隐式或显式创建观察者。 在Angular 2中,我们不再具有$ scope,但是我们确实覆盖了setInterval,setTimeout等。我可以看到Angular如何使用它来触发$ digest,但是Angular如何确定发生了什么变化,特别是考虑到Object.observe从未进入
我目前正在迭代一个数组,其中每个索引包含两个节点和一个关系(第1部分)- 我读了这篇文章,但我不明白如何实现它,使两个相同的节点具有相同的ID。我现在的代码是这样的: 创建两个节点 创造他们的关系 将关系添加到节点 坚持使用Neo4jTemplate.save() 我需要更改什么以合并而不是创建?我是否需要在持久化之前进行检查,或者在持久化SDN 4时是否有方法进行检查? 编辑: 我决定使用Neo
问题内容: 我在我的网站上无法使用jQuery功能。它的作用是使用该 函数识别窗口何时更改其滚动位置,并在更改时调用一些函数以从服务器加载数据。 问题是滚动位置稍有变化并立即将数据加载到底部时,就会立即调用该函数。但是,我希望实现的是在滚动/页面位置到达底部时加载新数据,就像Facebook feed那样。 但是我不确定如何使用jQuery检测滚动位置吗? 问题答案: 您可以使用jQuery的方法
问题内容: 我不明白何时对ajax请求使用Angular over jquery。 例如,为什么要使用: 代替 ?? 问题答案: 我的理解是,首选第一个原因有两个: $ http是可测试的。实际上,可以将其使用的后端存根并测试$ http请求,而无需 实际 发送请求。 $ http为您执行一些常见的“工作”,例如在POST请求中为您将内容类型设置为“ application / json”。 $
Maven shade插件创建的是否自动用于依赖于uberjar的项目(而不是普通的)? 在阅读了大量与dependency-reduced-pom.xml相关的问题并没有找到答案之后提出这个问题: 将dependency-reduced-pom.xml添加到基目录的Maven shade插件