Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Jquery包含到工厂中,并在多个控制器之间使用/共享该工厂?_Jquery_Angularjs_Angular Directive_Angular Factory - Fatal编程技术网

如何将Jquery包含到工厂中,并在多个控制器之间使用/共享该工厂?

如何将Jquery包含到工厂中,并在多个控制器之间使用/共享该工厂?,jquery,angularjs,angular-directive,angular-factory,Jquery,Angularjs,Angular Directive,Angular Factory,我有一个较长的jQuery函数用于图像库滑块。我有大约5条指令(所有指令都使用同一个滑块和不同的图片)。因为我不想将相同的jQuery代码复制粘贴到所有5个控制器中,所以我使用了一个工厂。 我将jQuery代码放入工厂,然后在每个控制器中调用工厂。它不起作用,但我不明白为什么。有人知道吗?谢谢! 编辑:Jquery包含在bevor和works中!问题不在于jQuery本身,而在于工厂。如果我在所有控制器中反复使用相同的jQuery代码,它就会正常工作。它不工作,如果我把它放在工厂,可以在控制器工

我有一个较长的jQuery函数用于图像库滑块。我有大约5条指令(所有指令都使用同一个滑块和不同的图片)。因为我不想将相同的jQuery代码复制粘贴到所有5个控制器中,所以我使用了一个工厂。 我将jQuery代码放入工厂,然后在每个控制器中调用工厂。它不起作用,但我不明白为什么。有人知道吗?谢谢! 编辑:Jquery包含在bevor和works中!问题不在于jQuery本身,而在于工厂。如果我在所有控制器中反复使用相同的jQuery代码,它就会正常工作。它不工作,如果我把它放在工厂,可以在控制器工厂。 工厂:

第1条指令:

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;
 });