2016-04-13 23 views
2

我有一个模板,我正在改变注入偏序的方法。它有'经典'的注入方式。我想用紧凑的形式替换它。我不能做这些代码行。我试过了,但我无法理解结构。因为我习惯于另一种形式。有人能帮助我吗?Angular的另一种注入方法

(function() { 
'use strict'; 

angular.module('app.data') 
    .factory('postResource', postResource) 
    .factory('postsUtils', postsUtils); 

postResource.$inject = ['$resource']; 

function postResource($resource) { 
    return $resource('/api/posts/:id', {id: '@id'}, { 
    update: { 
     method: 'PUT' 
    } 
    }); 
} 

postsUtils.$inject = ['postResource']; 
function postsUtils(postResource) { 
    function postsDuringInterval(posts, days) { 
    var today = new Date(); 
    var interval = 86400000 * days; 
    var postsDuringInterval = []; 
    posts.forEach(function(post) { 
     var postDate = new Date(post.date); 
     today - postDate < interval && postsDuringInterval.push(post); 
    }); 
    return postsDuringInterval; 
    } 

    function recent(posts, postsNum) { 
    posts.sort(function(a, b) { 
     if (a.date < b.date) return 1; 
     else if (a.date == b.date) return 0; 
     else return -1; 
    }); 
    return posts.slice(0, postsNum || 1); 
    } 

    function lastEdited(posts) { 
    var lastEdited = posts[0]; 
    posts.forEach(function(post) { 
     lastEdited = lastEdited.date < post.date ? lastEdited : post; 
    }); 
    return lastEdited; 
    } 

    return { 
    postsDuringInterval: postsDuringInterval, 
    lastEdited: lastEdited, 
    recent: recent 
    } 
} 
})(); 

回答

1

下面是如何注入依赖关系的示例。

var app = angular.module('myApp', 
    ['ngRoute', 'ngSanitize', 'ui.bootstrap', 'angular-flexslider', 
     'ng-backstretch', 'angular-parallax', 'fitVids', 'wu.masonry', 'timer', 
     'uiGmapgoogle-maps', 'ngProgress']); 

一个注入了服务的控制器的示例。

app.controller('ContactController',['$scope','contactService', 
    function($scope, contactService) { 

var self = this; 
    self.contact = {id:null, name:"",lastName:"",email:"",subject:"",message:""}; 

    this.submit = function(){ 
     contactService.submit(self.contact); 
     self.contact = {id:null, name:"",lastName:"",email:"",subject:"",message:""}; 
    }; 
}]); 

工厂:

app.factory('contactService',['$http','$q', function($http,$q){ 

    return { 

     submit: function (contact) { 
      return $http.post('/sendForm/', contact) 
       .then(
        function (response) { 
         return response; 
        }, 
        function (errResponse) { 
         console.error("Error while submitting form" + errResponse); 
         return $q.reject(errResponse); 
        } 
       ) 
     } 

    } 
}]); 

我觉得这是你指过的方式。希望这可以帮助。

+0

谢谢,但我不明白我的代码。这些功能是连接到控制器还是服务? – panagulis72

+0

该服务。你可以调用服务的方法,因为它被注入。 *注意,这些也应该是单独的文件。还要注意'this'和'self'。他们是不同的和重要的理解。 – Drew1208

+0

这是正确的吗? https://plnkr.co/edit/LOugzgRN5K5JZPwb7IgR?p=preview – panagulis72

相关问题