サービスにスコープ値を渡す必要があります。私がやっていることは、コントローラー内のサービスの機能を無効にし、この関数にパラメーターとしてスコープ値を渡すことです。ここでは、コードです
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つの方法はありますか、現在のコードで何か不足していますか?
私はあなたがあなたのサービスにあなたのオブジェクトの参照を渡すことを推測するために
は、あなたがangular.copy' 'を使用して日付オブジェクトのコピーを作成し、あなたのサービスのフィールドに割り当てることができますし、サービス関数のこれらのフィールドを変更します。 – Rachmaninoff
どちらの引数も未定義の場合、関数 'mettreAJour'は' undefined'を返します。次の行が '$ scope.labels = mettreAJour.labels;'を投げるのは不思議ではありません。 '$ scope.labels = mettreAJour && mettreAJour.labels;' –
はい、mettreAJour関数は未定義を返すことになります。なぜなら、パラメータは定義されていないので残りは定義されていないからですラベルとデータを途中で削除します。私の質問は、これらのパラメータを、コントローラからサービスまでのスコープ値であることを知る方法と呼んでいました。 – AsmaF