簡體   English   中英

在AngularJs中從視圖到工廠訪問$ scope數據

[英]Accessing $scope data from view to factory in AngularJs

如何在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。

我做的。 我忘了將$scope.items發送到我的工廠。 所以我testFactory.all($scope.items)是在控制器中添加了testFactory.all($scope.items) ,而不是普通的testFactory.all()

然后在我的工廠

我使用了function _all(value) ,因此可以使用視圖通過控制器傳遞的值。 我不確定這是否正確,但是可以。 如果有的話,請提出好的做法。

將$ scope移至其他服務是一個不好的做法,因為它們可能會更改它並影響您的控制器邏輯。 它將使控制器與其他服務耦合。 如果您的工廠需要控制器提供的數據,最好將這些參數傳遞給工廠的功能。

編輯:我看到你設法做到這一點,是的-傳遞$ scope.items是首選方式(而不是例如,傳遞$ scope)。

您可以將數據作為功能參數傳遞給工廠。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM