2017-06-08 20 views
0

コントローラには最初のコントローラは「cockpitController」、もう1つは「idCardSupplierWarnController」です。最初のコントローラではオブジェクトを設定し、設定されているかどうかをチェックし、私のオブジェクトが、私は他のコントローラでオブジェクトを取得したい場合は、すべてのオブジェクトがnullです。サービスを使用してコントローラ間でオブジェクトを共有する

PS:私はそれは、コントローラは、ナビゲーターの同じウィンドウ内にあるが、私の場合には、それは$window.open(url)を使用して、新しいウィンドウでのケースのために働いています。このソリューションをチェックします。

ルサービスidCardSupplierWarnService

var app = angular.module('idCardSupplierWarn'); 

app.service('idCardSupplierWarnService', function() { 

    this.idRefNum = ""; 
    this.idSupNum = ""; 
    this.codeSuppNum = ""; 

    this.setParam = function (paramSet) { 

     console.log(paramSet); 

     this.idRefNum = paramSet.designRefPart; 
     this.idSupNum = paramSet.idSuppNumber; 
     this.codeSuppNum = paramSet.codeSupp; 

    }; 

    this.getParamSupNum = function() { 

     return this.idSupNum; 

    }; 

    this.getParamCodeSupNum = function() { 

     return this.codeSuppNum; 

    }; 

    this.getParamIdRefNum = function() { 

     return this.idRefNum; 

    }; 


}); 

ルコントローラcockpitController

(function() { 
     angular 
      .module("cockpit", ['mm.foundation', 'security', 'message', "isteven-multi-select"]) 
      .controller('cockpitController', ['$scope', '$translate', 'serviceCockpit','idCardSupplierWarnService', '$window', function ($scope, $translate, serviceCockpit,idCardSupplierWarnService,$window) { 

       var urlSuppliersWarning = 'rest/suppliers/warnings'; 
       var urlSuppliersWarningByRefForDetails = 'rest/suppliers/warnings/supplier/ref/search'; 


       var self = this; 

       serviceCockpit.loadData([urlSuppliersWarning]).then(function (results) { 
        self.suppliersWarning = results[0].data; 
       }); 

       this.change = function() { 

        if (this.openWindow) { 
         this.openWindow = false; 
        } 
        else { 
         this.openWindow = true; 
        } 

       }; 


       $scope.openNewWindowRef = function (url, params) { 
        console.log(params); 
        idCardSupplierWarnService.setParam(params); 
        console.log(idCardSupplierWarnService.getParams()); 
        $window.open(url, '_blank', 'left=0, top=0, width=1100,height=600,scrollbars=yes, resizable=1'); 
       }; 

       $scope.openNewWindowSupp = function (url, params) { 
        idCardSupplierWarnService.setParam(params); 
        console.log(idCardSupplierWarnService); 
        $window.open(url, '_blank', 'left=0, top=0, width=1100,height=600,scrollbars=yes, resizable=1'); 
       }; 

       this.process = function (items) { 

        if (items.origin == 'reference' || items.origin == 'suppliers' || items.origin == 'supplierAccounts' || items.origin == 'supplierAddressCodes' || items.origin == 'reset') { 

         serviceCockpit.loadData([urlSuppliersWarningByRefForDetails], items).then(function (results) { 
          self.suppliersWarningDetails = results[0].data; 
         }); 
        } 

        serviceCockpit.loadData([urlSuppliersWarning], items).then(function (results) { 
         self.suppliersWarning = results[0].data; 
        }); 
       } 

      }]); 
    })(); 

ルコントローラ** idCardSupplierWarnController:**

(function() { 
    angular 
     .module("idCardSupplierWarn", ['mm.foundation', 'security', 'message', "isteven-multi-select"]) 
     .controller('idCardSupplierWarnController', ['$translate', '$scope', 'serviceCockpit','idCardSupplierWarnService', function ($translate, $scope, serviceCockpit,idCardSupplierWarnService) { 


      var urlSupplierWarningByRefDetail = 'rest/suppliers/warnings/supplier/details'; 

      var self = this; 


      var params = {} ; 

      params.idRefNum = idCardSupplierWarnService.getParamIdRefNum(); 
      params.idSupNum = idCardSupplierWarnService.getParamSupNum(); 
      params.codeSuppNum = idCardSupplierWarnService.getParamCodeSupNum(); 
         console.log(params.codeSuppNum); 


      serviceCockpit.loadData([urlSupplierWarningByRefDetail], params).then(function (results) { 
       self.suppliersWarningsList = results[0].data; 
      }); 


     }]); 
})(); 

Result after the first set in CockpitController

+0

まず、英語で保管してください。次に、ファクトリを使用してコントローラ間でデータを共有します。あなたはサービスの正しい振る舞いを見逃しました。あなたは工場のようなサービスを利用しています。あなたが探しているのは工場です。 – lin

答えて

1

サービスの機能における「これ」は、サービス自体の機能ではなく、サービスの個々の機能を指します。

はこのようにあなたのサービスを変更します。

app.service('idCardSupplierWarnService', function() { 

    var service = this 
    service.idRefNum = ""; 
    service.idSupNum = ""; 
    service.codeSuppNum = ""; 

    service.setParam = function (paramSet) { 

     console.log(paramSet); 

     service.idRefNum = paramSet.designRefPart; 
     service.idSupNum = paramSet.idSuppNumber; 
     service.codeSuppNum = paramSet.codeSupp; 

    }; 

    service.getParamSupNum = function() { 

     return service.idSupNum; 

    }; 

    service.getParamCodeSupNum = function() { 

     return service.codeSuppNum; 

    }; 

    service.getParamIdRefNum = function() { 

     service this.idRefNum; 

    }; 

    return service 

}); 
+0

同じ問題がcockpitControllerのパラメータを設定すると動作しますが、idCardSupplierWarnControllerでサービスを呼び出すと、すべてのオブジェクトがnullになります – YasBES

+0

おそらく実行の問題の順序です。 URLはハードコードされており、常にデータを利用できるようにしたいので、サービスのコンストラクタで取得することをお勧めします。 –

+0

あなたは私にいくつかの例を教えてください。 – YasBES

0

あなたはserviceにアクセスするには、cockpitモジュールにidCardSupplierWarnモジュールを挿入する必要があります。

angular.module("cockpit", ['mm.foundation', 'security', 'message', `isteven-multi-select`, `idCardSupplierWarn`]) 
+0

あなたの解決策は変わったが、何も変わらない。 – YasBES

+0

@ YasBES:ブラウザコンソールのエラー? – anoop

+0

最初のコントローラCockpitControllerのエラーはありません。私は設定することができます。getメソッドをチェックするとうまくいきますが、他のコントローラのオブジェクトを取得しようとすると、idCardSupplierWarnControllerは何もありません。(ヌルオブジェクト) – YasBES

関連する問題