使用 browserify 时如何在 AngularJS 中包含 jQuery?

How to include jQuery in AngularJS when using browserify?

我正在使用 node、gulp 和 browserify 使我的 JS 文件按正确的顺序排列并管理模块。我将 jQuery 和 AngularJS 作为节点模块安装,并在需要时需要它们。 Angular 默认使用 jqLit​​e 来处理 DOM-Elements。

我知道当 jQuery 在 AngularJS 之前加载时,Angular 将使用 jQuery 而不是 jqLit​​e。

但是在使用browserify的时候怎么可能让Angular使用jQuery。或者:如何要求 jQuery 到 angular?

现在我只是在做var $ = require("jquery");,需要的时候就用。但是我想要一个 Angular ,它会在执行时本机给我 jQuery 方法,例如:

app.directive("dir", function () {
    return {
        link : function ($scope, $elem) {
            var a = $elem.width();//jQuery methods currently not available here
        }
    };
});

我实际需要做的事情:

var jQuery = require("jquery");

app.directive("dir", function () {
    return {
        link : function ($scope, $elem) {
            var jqElement = jQuery($elem);
            var a = $jqElement.width();//jQuery methods are available here
        }
    };
});

未测试但应该可以工作,因为 AngularJS 将 jQlite 存储在 angular.element:

angular.element = require("jquery");

您可以使用browserify-shim

npm install browserify-shim --save-dev

package.json

"browserify": {
  "transform": ["browserify-shim"]
},
"browser": {
  "jquery": "./node_modules/jquery/dist/jquery.js"
},
"browserify-shim": {
  "jquery": "$",
  "angular": {
    "exports": "angular",
    "depends": ["jquery"]
  }
}

对于 AngualrJS 1.x 使用值提供程序

var jQuery = require('jQuery');
var app = require('../app');

app.value('jQuery', jQuery);

然后在您需要的指令或组件中(您不应该需要 jQuery):

var app = require('../app');

foo.$inject = ['jQuery'];
function foo(jQuery) {
    return {
        restrict: 'A',
        scope: true,
        link: function(element, scope, attr) {

             // I can use jQuery here
             // though I am unsure why
             // I would want to. 

        }
    }
}

app.directive('foo', foo);

现在,如果您需要为此指令编写单元测试,您可以在需要时为 jQuery 注入一个存根。

对于 angularjs 这对我有用。

var jQuery = require('jQuery');
var angular = require("angular");