2016-04-13 6 views
2

私はテンプレートを持っており、私はdipendeciesを注入する方法を変更しています。それは注射するための「古典的な」方法を持っています。私はそれをコンパクトな形に置きたい。私はこれらのコード行を行うことはできません。私は試しましたが、私はstrusctureを理解することはできません。私は他の形に慣れているからです。誰かが私を助けることができますか?Angularで注入するもう1つの方法

(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

関連する問題