gpt4 book ai didi

jquery - 在 Angular 指令中以 noconflict 运行 jQuery 插件 diff2html

转载 作者:行者123 更新时间:2023-12-03 22:28:07 31 4
gpt4 key购买 nike

我正在尝试使用 diff2html 格式化 Angular 指令内的 diff和 var jq = $.noConflict();

我创建了一个 Angular 常量来保存 jQuery 并将其传递到指令中,如下所示:

app.js

(function () { //IIFE to enable strict mode
'use strict';

angular.module('dashboard', ['ui.router', 'ngSanitize'])
.config(['$interpolateProvider', function ($interpolateProvider) {
$interpolateProvider.startSymbol('[[[').endSymbol(']]]');
}])
.constant('jQuery', window.jQuery);
})();

directive.js

(function () { //IIFE to enable strict mode

'use strict';

angular.module('dashboard')
.directive("loadDiff", ['$http', 'jQuery', function($http, $) {
return {
restrict: "A",
link: function(scope, elem, attrs) {

$http.get("diff url here").success(function (data) {
var diff2htmlUi = new Diff2HtmlUI({diff: data});
diff2htmlUi.draw('#line-by-line');
});
}
}
}]);
})();

问题

当它运行时,我收到以下错误:

TypeError: $ 不是 Diff2HtmlUI 的函数。_initSelection 在新的 Diff2HtmlUI

对此进行调试,您可以看到,当实例化 Diff2HtmlUI 时,它会尝试设置正文,但由于与 var jq = $.noConflict(); 冲突,这可能会失败。.

  Diff2HtmlUI.prototype._initSelection = function() {
var body = $('body');
var that = this;

如何解决这个问题?我希望传入 jQuery 作为 $ 会覆盖 noconflict 冲突?

最佳答案

我真的不明白为什么你要将 jQuery 传递给你的指令。由于您直接加载了它,因此您和 diff2html 已经可以通过全局 window 对象访问它。

此外,您可能只想传递指令 element 而不是外部 div id,只需将其作为 $(elem) 传递,因为它需要 jQuery 对象或DOM 查询字符串。

angular.module('dashboard', [])
.config(['$interpolateProvider', function ($interpolateProvider) {
$interpolateProvider.startSymbol('[[[').endSymbol(']]]');
}])
.constant('jQuery', window.jQuery)
.directive('loadDiff', ['$http', function ($http) {
return {
restrict: 'A',
link: function (scope, elem, attrs) {

$http({
url: 'https://api.github.com/repos/rtfpessoa/diff2html/pulls/106.diff',
headers: {
accept: 'application/vnd.github.v3.diff'
}
})
.then(function (resp) {
var diff2htmlUi = new Diff2HtmlUI({ diff: resp.data });
diff2htmlUi.draw($(elem));
})

}
}
}]);
<html>

<head>
<link href="https://cdnjs.cloudflare.com/ajax/libs/diff2html/2.3.0/diff2html.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/diff2html/2.3.0/diff2html.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/diff2html/2.3.0/diff2html-ui.js"></script>
<script data-require="angular.js@1.6.2" data-semver="1.6.2" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.2/angular.js"></script>
<script data-require="jquery@3.1.1" data-semver="3.1.1" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>

<body ng-app="dashboard">
<div load-diff="load-diff">Loading diff...</div>
</body>

</html>

关于jquery - 在 Angular 指令中以 noconflict 运行 jQuery 插件 diff2html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43808805/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com