从控制器到外部函数angularjs的对象访问

acces to an object from controller to external function angularjs

本文关键字:对象 访问 angularjs 函数 控制器 外部      更新时间:2023-09-26

我之前问过这个问题,我有一个响应告诉我添加一个服务,但它不工作。我想在外部函数中访问来自控制器($scope)的变量,您可以看到下面的部分示例:

app.controller('formContratCtrl', function ($scope, $location, $rootScope,$cordovaFile, $cordovaGeolocation, $cordovaCamera) {
"$scope.owner={
"first":"john",
"last":"kennedy",
"phone":"",
"car":"",
"registration":"",
"dateRegistration":"
};

var JutoPDFCreator = {
createPDF: function(filename) {
var doc = new jsPDF();
doc.text(13, 20, 'Prénom : '+ $scope.owner.first);
doc.text(13, 25, 'Nom : '+ $scope.owner.last);
doc.text(13, 30, 'Tél : '+ owner.phone);
doc.text(13, 35, 'véhicule loué : '+ owner.car);
doc.text(13, 40, 'Immatriculé : '+ owner.registration);
doc.text(13, 45, 'Depuis : '+ owner.dateRegistration);
.
.
} 

创建了一个调用外部库的服务,如下所示:

app.service('myPDFService', function() {
  this.createPDF = function(filename, owner) {
    var doc = new jsPDF();
    doc.text(13, 20, 'Prénom : ' + owner.First);
    doc.text(13, 25, 'Nom : ' + owner.Last);
    doc.text(13, 30, 'Tél : ' + owner.phone);
    doc.text(13, 35, 'véhicule loué : ' + owner.Car);
    doc.text(13, 40, 'Immatriculé : ' + owner.registration);
    doc.text(13, 45, 'Depuis : ' + owner.dateRegistration);
    console.log(owner);
  };
});

服务被注入控制器:

app.controller('formContratCtrl', ['myPDFService', function(myPDFService) {
  this.owner = {
    first: "John",
    last: "kennedy",
    phone: "",
    car: "",
    registration: new Date(),
    dateRegistration: new Date()
  };
  this.create = function() {
    myPDFService.createPDF('filename', this.owner);
  };
}]);

下面是活塞的完整工作示例。您可能也应该使用一个服务来返回外部库,但这应该可以让您继续前进。如果controllerAs语法奇怪或不全面,应将this替换为$scope,并在需要的地方注入$scope

Angular也有很棒的服务文档。

为外部库创建一个工厂。

function jsPDFFactory() {
    return function() { 
        new jsPDF() 
    };
}
angular.module('yourApp').factory('jsPDF', jsPDFFactory);

然后你可以像这样创建你的适配器:

JutoPDFCreator.$inject = ['jsPDF'];
function JutoPDFCreator = function(jsPDF) {
    this.doc = jsPDF();
 }
 JutoPDFCreator.prototype.createPDF = function(filename, owner) {
     this.doc.text(13, 20, 'Prénom : '+ owner.First);
     . . .
 }
 angular.module('yourApp').service('jutoPDFCreator', JutoPDFCreator);

然后只需将jutoPDFCreator注入到控制器中并调用createPDF()方法。