如何在angularjs中从视图访问我的工厂的$ scope数据?我可以从我的控制器访问$ scope.items,但是当我需要在工厂使用它来使用数据并生成pdf时我无法访问它。
angular.module('myApp', [])
.controller('myCtrl', function($scope, $http, testFactory) {
$scope.link = "http://localhost:3450/loading.html";
testFactory.all().then(
function(res){
$scope.link = res;
},
function(err){
console.log(err);
}
);
})
.factory('testFactory', function($q){
var pdfInfo = {
content: [
//data should be here...
]
};
var link = {};
function _all(){
var d = $q.defer();
pdfMake.createPdf(pdfInfo).getDataUrl(function(outputDoc){
d.resolve(outputDoc);
});
return d.promise;
}
link.all = _all;
return link;
});
当我从视图中单击生成按钮时,我使用工厂,它将等到生成pdf。因为我之前没有这样做,我需要点击两次按钮才能生成pdf。
答案 0 :(得分:0)
我做到了。我忘了将$scope.items
发送到我的工厂。所以我所做的是在控制器中添加了testFactory.all($scope.items)
,而不仅仅是testFactory.all()
。
然后在我的工厂,
我使用function _all(value)
,因此我可以使用视图通过控制器传递的值。我不确定这是否是正确的方法,但它确实有效。如果有,请建议好的做法。
答案 1 :(得分:0)
将$ scope移动到其他服务是一种不好的做法,因为它们可能会改变它并影响控制器逻辑。它将使控制器与其他服务之间形成耦合。 如果您的工厂需要来自控制器的数据,最好将这些参数传递给工厂的功能。
编辑:我看到你设法做到了,是的 - 传递$ scope.items是首选的方式(而不是,例如,传递$ scope)。
答案 2 :(得分:0)
您只需将数据传递给工厂即可 功能参数。
angular.module('myApp', [])
.controller('myCtrl', function($scope, $http, testFactory) {
var pdfInfo = {
content: $scope.items
};
$scope.link = "http://localhost:3450/loading.html";
testFactory.all(pdfInfo).then(
function(res) {
$scope.link = res;
},
function(err) {
console.log(err);
}
);
})
.factory('testFactory', function($q) {
var link = {};
function _all(pdfInfo) {
var d = $q.defer();
pdfMake.createPdf(pdfInfo).getDataUrl(function(outputDoc) {
d.resolve(outputDoc);
});
return d.promise;
}
link.all = _all;
return link;
});