2013-11-20 30 views
1

我想找到一種乾淨的方法來爲路線設置resolve如何爲路線乾淨地指定解析屬性

從我見過有這樣做的3個主要方面:聲明全局函數(不好)

  • 匿名函數(壞如果邏輯是複雜的,或者如果我需要

    • 相同的功能在多個地方)

    • 在控制器功能上設置一個方法(這對我不起作用,因爲我不喜歡把控制器作爲單獨的函數聲明,而只是做module(...).controller(...);

    有沒有更好的辦法做到這一點,然後上述,特別是如果我需要類似的路線之間共享的決心。 (例如/ people和/ people /:personID)

    謝謝。

  • +3

    使用服務公開解決方法。 – Chandermani

    +0

    @Chandermani你不能在Angular的「.config」階段插入服務 – marcoseu

    +1

    你可以爲路由對象映射。就像'解析:{data:function($ http,$ myService){}}' – Chandermani

    回答

    3

    如何創建.constant並在您的.config階段注入?如果你看看AngularJS documentation for .constant,你會發現你可以定義一個函數作爲常量。

    那麼,你應該能夠做一些事情,如:

    app.constant("Resolver", { 
        "MessageUtils": function() { 
        return { 
         get: function (message) { 
         return "MUTIL: " + message; 
         } 
        } 
        } 
    }); 
    

    那麼你可以使用它作爲:

    app.config(function ($routeProvider, Resolver) { 
        $routeProvider.when("/home", {templateUrl: ..., resolve: Resolver, ...}) 
    ... 
    

    這裏是一個工作plunker:
    http://plnkr.co/edit/psuYHu4rtlp4o42ZgqVs?p=preview

    我在我的angularAMD項目中有類似的請求,我創建了一個名爲.route的函數來幫助我設置解決方案屬性定義路線時。這裏是代碼的link

    +0

    謝謝,marcoseu。 Chandermani關於使用服務或更普通類型提供者的想法更廣泛。 – Francisc