如何将Jquery包含到工厂中,并在多个控制器之间使用/共享该工厂?
我有一个较长的jQuery函数用于图像库滑块。我有大约5条指令(所有指令都使用同一个滑块和不同的图片)。因为我不想将相同的jQuery代码复制粘贴到所有5个控制器中,所以我使用了一个工厂。 我将jQuery代码放入工厂,然后在每个控制器中调用工厂。它不起作用,但我不明白为什么。有人知道吗?谢谢! 编辑:Jquery包含在bevor和works中!问题不在于jQuery本身,而在于工厂。如果我在所有控制器中反复使用相同的jQuery代码,它就会正常工作。它不工作,如果我把它放在工厂,可以在控制器工厂。 工厂: 第1条指令:如何将Jquery包含到工厂中,并在多个控制器之间使用/共享该工厂?,jquery,angularjs,angular-directive,angular-factory,Jquery,Angularjs,Angular Directive,Angular Factory,我有一个较长的jQuery函数用于图像库滑块。我有大约5条指令(所有指令都使用同一个滑块和不同的图片)。因为我不想将相同的jQuery代码复制粘贴到所有5个控制器中,所以我使用了一个工厂。 我将jQuery代码放入工厂,然后在每个控制器中调用工厂。它不起作用,但我不明白为什么。有人知道吗?谢谢! 编辑:Jquery包含在bevor和works中!问题不在于jQuery本身,而在于工厂。如果我在所有控制器中反复使用相同的jQuery代码,它就会正常工作。它不工作,如果我把它放在工厂,可以在控制器工
app.directive('picturesProject', function () {
return {
restrict: 'E',
templateUrl: 'projects/shop/picturesshop.html',
scope: {},
controller: 'shopCtrl',
link: function(scope){
}
}
})
app.controller('shopCtrl', function($scope,prodsFactory){
return prodsFactory.slider();
});
index.html
如果jQuery库脚本包含在AngularJS库脚本之前,那么jQuery将作为
angular.element
提供
如果jQuery可用,angular.element
是该函数的别名。如果jQuery不可用,angular.element
将委托给AngularJS的jQuery内置子集,称为“jQuery lite”或jqLite。
要使用jQuery,只需确保它在angular.js
文件之前加载。您还可以使用ngJq
指令指定jqlite应在jQuery上使用,或者如果页面上存在多个版本,则使用jQuery的特定版本
也就是说,工厂需要将某些东西恢复到其建设功能:
app.factory('prodsFactory', function ($http) {
var $ = angular.element;
var prodsFactory = {};
prodsFactory.slider=function(){
$(function(){
console.log("jQuery prodsFactory slider invoked");
});
};
//RETURN prodsFactory to construction function
//vvvvvvvvvvvvvvvvv
return prodsFactory;
});
如果您计划使用angularjs的jquery lite实现中未实现的任何jquery函数,则需要在angularjs脚本之前包含jquery 控制器构造函数不使用返回值,那么当代码调用工厂函数并将该值返回控制器构造函数时,您希望发生什么情况?如果我不返回而只是调用它,那么它也不起作用。请描述问题。“它不起作用”不是一个问题陈述。告诉我们预期的行为应该是什么。好吧,按不起作用,我的意思是jQuery函数没有执行的任何细节。只有当我将jQuery代码一次又一次地放入5个控制器中的每一个时,它才起作用——而不是当我将它放入工厂并从控制器调用它时。在代码中放入一些
console.log
语句。我想您会发现jQuery函数正在执行,但不是在您预期的时间执行。在指令中,控制器是在调用postLink函数之前构造的。jQuery可以自己工作。唯一不起作用的是,如果我将其放入工厂,然后尝试在控制器中调用工厂。在您的工厂中,您是否尝试放置“return prodsFactory”?问题不在于jQuery,而在于工厂。这是不起作用的。
<script src="projects/shop/picturesshop.directive.js"></script>
app.factory('prodsFactory', function ($http) {
var $ = angular.element;
var prodsFactory = {};
prodsFactory.slider=function(){
$(function(){
console.log("jQuery prodsFactory slider invoked");
});
};
//RETURN prodsFactory to construction function
//vvvvvvvvvvvvvvvvv
return prodsFactory;
});