【发布时间】:2017-06-16 06:04:17
【问题描述】:
我有一个更长的 jQuery 函数用于图片库滑块。我有大约 5 个指令(全部使用带有不同图片的相同滑块)。因为我不想将相同的 jQuery 代码复制粘贴到所有 5 个控制器中,所以我使用了工厂。 我将 jQuery 代码放入工厂,然后在每个控制器中调用工厂。它不工作,但我不明白为什么。有谁知道吗?谢谢! 编辑: Jquery 包含在角度和作品中!问题不在于 jQuery 本身,而在于工厂。如果我在所有控制器中一遍又一遍地使用相同的 jQuery 代码,它就可以工作。如果我把它放在工厂里,它就不能工作,并且可以把它放在控制器里。 工厂:
app.factory('prodsFactory', function ($http) {
var prodsFactory = {};
prodsFactory.slider=function(){
$(function(){
...
})
}
})
第一个指令:
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 ...
<script src="projects/shop/picturesshop.directive.js"></script>
...
【问题讨论】:
-
控制器构造函数不使用返回值,那么当代码调用工厂函数并将该值返回给控制器构造函数时,您期望会发生什么?
-
如果我不返回而只是调用它,它也不起作用。
-
描述问题。“它不起作用”不是问题陈述。告诉我们预期的行为应该是什么。
-
好吧,这不起作用,我的意思是任何洞察 jQuery 函数的东西都没有被执行。仅当我将 jQuery 代码一次又一次地放入 5 个控制器中的每一个时才有效——而不是当我将其放入工厂并从控制器中调用它时。
-
在代码中加入一些
console.log语句。我想你会发现 jQuery 函数 is 正在执行,但不是在你期望的时候。在指令中,控制器是在 调用 postLink 函数之前构造的。
标签: jquery angularjs angular-directive angular-factory