Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将服务添加到角节点中的控制器_Javascript_Angularjs_Service_Ionic Framework - Fatal编程技术网

Javascript 将服务添加到角节点中的控制器

Javascript 将服务添加到角节点中的控制器,javascript,angularjs,service,ionic-framework,Javascript,Angularjs,Service,Ionic Framework,我曾尝试构建一个返回格式化日期的服务,当我把它放在控制器中时,它会起作用,但我在很多地方都需要它,所以我想我应该构建一个服务。现在,当我尝试将服务注入控制器时,它会给我一个未知的提供程序问题 Unknown provider: dateProvider <- date <- displaydate Controller.js angular.module('starter.controllers', ['google-maps'.ns(),'starter.services'])

我曾尝试构建一个返回格式化日期的服务,当我把它放在控制器中时,它会起作用,但我在很多地方都需要它,所以我想我应该构建一个服务。现在,当我尝试将服务注入控制器时,它会给我一个未知的提供程序问题

Unknown provider: dateProvider <- date <- displaydate
Controller.js

angular.module('starter.controllers', ['google-maps'.ns(),'starter.services'])
.controller('VolgendCtrl', function($scope, displaydate) {
    var date = displaydate(value[4]);
})
App.js

var starter = angular.module('starter', ['ionic','starter.services',  'starter.controllers' ,'ngCordova'])

starter.config(function($stateProvider, $urlRouterProvider,$httpProvider,   $ionicConfigProvider) {
    $ionicConfigProvider.prefetchTemplates(true);
    $urlRouterProvider.otherwise('/tab/volgend');
    $stateProvider

    // setup an abstract state for the tabs directive
    .state('tab', {
        url: "/tab",
        abstract: true,
        templateUrl: "templates/tabs.html"
    })

    .state('tab.volgend', {
        url: '/volgend',
        views: {
            'volgend': { 
                templateUrl: 'templates/volgend.html',
                controller: 'VolgendCtrl',          
            }
        }
    })
    // HOME STATES AND NESTED VIEWS ========================================
});

starter.run(function($ionicPlatform) {
    $ionicPlatform.ready(function() {
        // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
        // for form inputs)
        if(window.cordova && window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        }
        ionic.Platform.isFullScreen = true
    });
})

有人能给我解释一下为什么它不能像我期望的那样工作吗?

如果“日期”,那么在displayDate中注入的东西实际上就是您在控制器中尝试调用displayDate的东西,而不是另一个服务,那么您不应该以这种方式注入它。然后您应该只注入$filter,然后从工厂函数返回一个带有“date”参数的函数,并在该函数中进行计算

angular.module('starter.services', [])
.factory('displaydate',['$filter', function($filter) {
  return function (date){
    var actiondate = new Date(date);
    var today = new Date();
    if(today.getDate() == actiondate.getDate()){
        var hourssince =   today.getHours() - actiondate.getHours()
        var minutessince =   today.getMinutes() - actiondate.getMinutes()
        var secondssince =   today.getSeconds() - actiondate.getSeconds()
        if(hourssince > 0){
            date = hourssince+'u';
        }else if(minutessince > 0){
            date = minutessince+'m';
        }else{
            date = secondssince+'s';
        }
    }else{
        var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
        var diffDays = Math.round(Math.abs((today.getTime() - actiondate.getTime())/(oneDay)));
        if(diffDays > 28){
            var identifier = actiondate.getMonth();
            date = $filter('date')(actiondate,"d "+ maandarray[identifier] + " yy " + " HH:" + "mm");
        }else{ 
            date = diffDays+'d';
        }
    }
    return date;
  }
}]);

您是否在任何地方申报了“日期”服务?您在“displayDate”服务中注入的函数。顺便说一下,您从工厂获得的是工厂函数的返回值。如果您想像在控制器中那样调用它,那么应该返回一个函数。也许我看错了,但看起来你只是返回了一个数字?还是字符串?谢谢你的解释@Gustav!
angular.module('starter.services', [])
.factory('displaydate',['$filter', function($filter) {
  return function (date){
    var actiondate = new Date(date);
    var today = new Date();
    if(today.getDate() == actiondate.getDate()){
        var hourssince =   today.getHours() - actiondate.getHours()
        var minutessince =   today.getMinutes() - actiondate.getMinutes()
        var secondssince =   today.getSeconds() - actiondate.getSeconds()
        if(hourssince > 0){
            date = hourssince+'u';
        }else if(minutessince > 0){
            date = minutessince+'m';
        }else{
            date = secondssince+'s';
        }
    }else{
        var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
        var diffDays = Math.round(Math.abs((today.getTime() - actiondate.getTime())/(oneDay)));
        if(diffDays > 28){
            var identifier = actiondate.getMonth();
            date = $filter('date')(actiondate,"d "+ maandarray[identifier] + " yy " + " HH:" + "mm");
        }else{ 
            date = diffDays+'d';
        }
    }
    return date;
  }
}]);