2016-07-21 12 views
0

サービスにスコープ値を渡す必要があります。私がやっていることは、コントローラー内のサービスの機能を無効にし、この関数にパラメーターとしてスコープ値を渡すことです。ここでは、コードです

HTMLコード

<md-datepicker ng-model="dateDebut" md-placeholder="Enter date"> </md-datepicker> 
<md-datepicker ng-model="dateFin" md-placeholder="Enter date" ></md-datepicker> 

コントローラー・コード

app.controller('graphCtrl', function($scope, $stateParams, graphDetails, $filter,$http) { 

    var self = this; 

    self.dateDebut = $scope.dateDebut; 
    self.dateFin = $scope.dateFin; 

    var mettreAJour = graphDetails.mettreAJour(self.dateDebut, self.dateFin); 

    $scope.labels = mettreAJour.labels; 
    $scope.data = mettreAJour.data; 
}); 

サービスコード

app.factory('graphDetails', function($filter, $http) { 
    var labels = []; 
    var data = [ 
    [] 
    ]; 

    return { 
    mettreAJour: function(dateDebut, dateFin) { 
     if (dateDebut && dateFin) { 
     var dd = $filter('date')(dateDebut, 'yyyy-MM-dd;HH:mm:ss'); 
     var df = $filter('date')(dateFin, 'yyyy-MM-dd;HH:mm:ss'); 
     var dif = dateFin.getDate() - dateDebut.getDate(); 

     //do somthing with labels and data 
     return { 
      labels : labels, 
      data : data 
     }; 

     } 
    } 
    }; 
}); 

私がコメントするのであれば、私は定義されていないエラーラベルとして取得し、それは私はこのエラーが表示されます:

Cannot read property 'getDate' of undefined 

これはコードがdateFinでもdateDebutでも認識しないことを意味します。

サービスにスコープを渡すもう1つの方法はありますか、現在のコードで何か不足していますか?

+0

私はあなたがあなたのサービスにあなたのオブジェクトの参照を渡すことを推測するために

は、あなたがangular.copy' 'を使用して日付オブジェクトのコピーを作成し、あなたのサービスのフィールドに割り当てることができますし、サービス関数のこれらのフィールドを変更します。 – Rachmaninoff

+0

どちらの引数も未定義の場合、関数 'mettreAJour'は' undefined'を返します。次の行が '$ scope.labels = mettreAJour.labels;'を投げるのは不思議ではありません。 '$ scope.labels = mettreAJour && mettreAJour.labels;' –

+0

はい、mettreAJour関数は未定義を返すことになります。なぜなら、パラメータは定義されていないので残りは定義されていないからですラベルとデータを途中で削除します。私の質問は、これらのパラメータを、コントローラからサービスまでのスコープ値であることを知る方法と呼んでいました。 – AsmaF

答えて

0

を縮小化している場合、私が正しく質問を理解していれば必要とされるinline array annotationを見てみたときにスコープの変更のいずれかdateDebutまたはdateFinプロパティ。

これを実現するには、$watchまたは$watchGroupの方法を使用できます。 Simplified Demo。例

app.controller('graphCtrl', function($scope, graphDetails) { 

    // start watcher 
    $scope.$watchGroup(['dateDebut', 'dateFin'], function(args) { 
    var debut = args[0], fin = args[1]; 
    angular.extend($scope, graphDetails.mettreAJour(debut, fin)) 
    }) 
}) 
+0

あなたの答え、$スコープをありがとう。$ watchGroupはうまくいきました。私の関数は私のパラメータを認識するようになりました。dateDebutとdateFin – AsmaF

0

は、おそらくこれはあなたがmettreAJourからlabelsを返すようにしようとしているが、それはlabels & dataを認識していないためです。

このスニペットが便利です。

app.factory('graphDetails', function($filter, $http) { 
    var _graphDeatilsObject = {}; 
    _graphDeatilsObject.labels = []; 
    _graphDeatilsObject.data = [ 
    [] 
    ]; 

    _graphDeatilsObject.mettreAJour = function(dateDebut, dateFin) { 
    // Rest of the code 
    } 
    return _graphDeatilsObject; 
}); 

はまた、あなたがする何とかreevalute値を必要とするあなたは、コード

+0

あなたの答えをありがとうが、私はまだ同じエラーラベルが定義されていない取得します。 – AsmaF

関連する問題