2016-11-10 4 views
0

Hallo Ich bin auf der Suche nach einem Datepicker (Material Kit UI), die das Datum der zurückgegebenen Snapshots filtert, wenn ich eine Liste von Snapshot-Bildern auf einer Seite zurückgeben. Allerdings erhalte ich einen Injektor Fehler: Angularjs: 13920 Fehler: [$ Injektor: UNPR] Unbekannter Anbieter: dayFilterFilterProvider < - dayFilterFilter http://errors.angularjs.org/1.5.8/ $ Injektor/UNPR p0 = dayFilterFilterProvider% 20% 3C-NaNayFilterFilterAngularJS Datepicker zum Zurückgeben von Snapshots

Hier die Richtlinie:

(function() { 
    "use strict"; 
    app.controller("MainController", [ 
     "$rootScope", 
     "$scope", 
     function ($rootScope, $scope) { 
      $scope.dayFilter = null; 
      $scope.dayFilter = function(items, date) { 
       return function(items, date) { 
        $rootScope.dateFilter = date; 
        var filtered = []; 
        var begin, end 
        begin = date.setHours(0, 0, 0); 
        end = date.setHours(23, 59, 59); 
        angular.forEach(items, function(item) { 
         if (item > begin && item < end) { 
          filtered.push(item) 
         } 
        }) 
        console.log("Filtered day", date) 
        return filtered 
       } 
      }; 
       $scope.dayFilter(new Date(), 'date'); 

Und hier ist der html:

<div class="dropdown"> 
     <h3 class="dropdown-toggle" id="day-datetimepicker" role="button" data-toggle="dropdown" data-target="#"> {{ filtered.date ? filtered.date.label : 'Day' }} <span class="caret"></span></h3> 
     <ul class="dropdown-menu" role="menu" aria-labelledby="day-datetimepicker"> 
      <datetimepicker data-ng-model="dateFilter" data-datetimepicker-config="{ 
       dropdownSelector: '#day-datetimepicker', 
       minView: 'day', 
       startView: 'day' 
      }" data-on-set-time="dayFilter(newDate, 'day')"></datetimepicker> 
     </ul> 
    </div> 

    <a ng-repeat="s in chui.snapshot | dayFilter:'day' | orderBy:'-date'" 

     ng-click="select('snapshot', s); 
      modal('snapshot-keyholder', true);" 
     class="snapshot-thumbnail col-xs-6 col-sm-4 col-md-3 col-lg-2" 
    > 

Lassen Sie mich wissen, wenn Sie weitere Fragen haben. Vielen Dank im Voraus

Als Reaktion auf die erste Antwort, die ich dieses Modul erstellt:

app.filter("dayFilter",[ 
     function() { 
      return function dayFilter(items,date) { 
       var d = new Date(); 
       var filteredItems = []; 
       var begin, end 
       begin = d.setHours(0, 0, 0); 
       end = d.setHours(23, 59, 59); 
       angular.forEach(items, function(item) { 
        if (item > begin && item < end) { 
         filtered.push(item); 
        } 
       }) 
       console.log("Filtered day", d); 
       return filteredItems 
      } 
      $filter("dayFilter"); 
      // dayFilter(new Date(),'date'); 
     }]); 


I no longer get an error, but the snapshots do not appear in the output, even though I get the following in the console: 
iltered day Thu Nov 10 2016 23:59:59 GMT-0500 (COT) 
main.js?v=2016-11-08-3:89 Filtered day Thu Nov 10 2016 23:59:59 GMT-0500 (COT) 
main.js?v=2016-11-08-3:89 Filtered day Thu Nov 10 2016 23:59:59 GMT-0500 (COT) 
main.js?v=2016-11-08-3:89 Filtered day Thu Nov 10 2016 23:59:59 GMT-0500 (COT) 
main.js?v=2016-11-08-3:89 Filtered day Thu Nov 10 2016 23:59:59 GMT-0500 (COT) 
main.js?v=2016-11-08-3:89 Filtered day Thu Nov 10 2016 23:59:59 GMT-0500 (COT) 
main.js?v=2016-11-08-3:89 Filtered day Thu Nov 10 2016 23:59:59 GMT-0500 (COT) 
main.js?v=2016-11-08-3:89 Filtered day Thu Nov 10 2016 23:59:59 GMT-0500 (COT) 
main.js?v=2016-11-08-3:89 Filtered day Thu Nov 10 2016 23:59:59 GMT-0500 (COT) 
+0

Oh In der Post merke ich, dass ich die geschweiften Klammern im Jabascript und dem ersten div im html nicht geschlossen habe, aber im Skript sind sie geschlossen (wenn ich sie kopiere, gibt es andere Direktiven und Teile des Skripts, die nicht sind relevant zu diesem Teil, und so habe ich die Teile nach ihnen geschlossen. –

+0

'$ scope' kann nicht in Filterfunktionen injiziert werden. Ein '$ scope' kann nur in Controller injiziert werden, die durch die 'ng-controller'-Direktive oder benutzerdefinierte Direktiven instanziiert werden. – georgeawg

+0

das hat geholfen und ich habe weitere Änderungen vorgenommen ... ist es möglich, aus den Informationen, die ich gegeben habe (siehe Edits am Ende der Frage) zu sehen, warum ich nicht die gewünschte Ausgabe bekomme? –

Antwort

0

Die Vorlage dayFilter in der ng-repeat Richtlinie verwendet. Um einen Filter zu dem Modul hinzufügen möchten, verwenden Sie die module.filter Methode:

app.filter("dayFilter",() => { 
    return function dayFilter(items, date) { 
     //filter code 
     return filteredItems; 
    }; 
}); 

Um den Filter im Controller zu instanziiert, verwenden Sie den $filter Service:

$filter("dayFilter"); 

Weitere Informationen finden Sie AngularJS Developer Guide -- Creating Custom FIlters

+0

Der $ scope.dayFilter = $ Filter ("dayFilter"); anstelle des $ scope.dayFilter (neues Date(), "Datum") ;? & Ich bin mir nicht sicher, wie ich das app.filter (..... etc aufgrund der Struktur des Controllers anwenden würde? –

+0

danke ... Ich habe die Frage bearbeitet, wenn Sie einen Blick darauf werfen könnten und lassen Sie mich wissen Warum ich immer noch falsch liege würde es sehr geschätzt werden –

Verwandte Themen