我们可以访问工厂AngularJS中的控制器方法吗?
我在一个控制器中有这个方法,我想在工厂中访问它,我已经通过函数在工厂中注入了我们可以访问工厂AngularJS中的控制器方法吗?,angularjs,Angularjs,我在一个控制器中有这个方法,我想在工厂中访问它,我已经通过函数在工厂中注入了$scope变量,我从范围中获取所有的值,除了这个方法,它是在该控制器中定义的,任何帮助都可以 .factory('viewPdfDocument',['$sce','searchService', 'scrollTop', 'pdfPluginDetector', '$timeout',function($sce, searchService, scrollTop, pdfPluginDetector, $timeou
$scope
变量,我从范围中获取所有的值,除了这个方法,它是在该控制器中定义的,任何帮助都可以
.factory('viewPdfDocument',['$sce','searchService', 'scrollTop', 'pdfPluginDetector', '$timeout',function($sce, searchService, scrollTop, pdfPluginDetector, $timeout) {
return {
pdfView: function ($scope, docId, pdftest, accessForbiddenMessage, genericErrorMessage) {
clearCheckBoxes();
}
};
}]);
您可以在服务中创建通知函数,并在控制器中添加该函数 控制器
//In your controller:
var clearCheckBoxes = function(){
//your function here
}
viewPdfDocument.registerObserverCallback(clearCheckBoxes);
服务:
//In your service:
.factory('viewPdfDocument',['$sce','searchService', 'scrollTop', 'pdfPluginDetector', '$timeout',function($sce, searchService, scrollTop, pdfPluginDetector, $timeout) {
var observerCallbacks = [];
var notifyObservers = function () {
angular.forEach(observerCallbacks, function (callback) {
callback();
});
};
return {
observerCallbacks: function (callback) {
observerCallbacks.push(callback);
},
pdfView: function () {
notifyObservers();
}
}])
这叫做观察者模式。
如果要从服务通知控制器中的多个功能,则可以使用它。服务不需要知道控制器的详细信息。您应该能够在对控制器的回调可能不同的其他情况下重用您的服务 如果它是一个单次回调,比如说指示某个活动的完成,那么最干净的方法就是让服务方法返回一个承诺,并在它想要通知控制器时解决它。然后回到控制员那里,你在承诺完成后采取行动 控制器:
viewPdfDocument.pdfView(...).then(clearCheckBoxes);
这为控制器提供了最大的灵活性,它可以使用不同的函数随时调用.then()
此外,还可以承诺提供持续的通知,比如在下载时显示进度条
viewPdfDocument.pdfView(...).then(null, null, updateProgress);
请注意,如果您想在angular中使用进度通知,您必须使用旧的
$q.defer()
机制来创建和通知承诺,否则请使用ES6兼容机制。如果需要共享帐户,请使用BthHanks公共服务来快速回复Riyaj,为什么要这样做。问题是,我想在多控制器上使用一种方法,所以我在工厂中定义了该方法。但该方法包含对同一控制器的其他方法调用。朋友,您做错了什么。您应该将这些事情分开。从控制器中的工厂返回值,并在此基础上调用我们的metod