亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

AngularJS 中的 Factory、Service以及 Provider的區(qū)別

Cristic / 2374人閱讀

摘要:代碼代碼功夫瑜伽語(yǔ)法糖功夫瑜伽它是一個(gè)可注入的構(gòu)造器在中它是單例的用它在中通信或者共享數(shù)據(jù)都合適功夫瑜伽語(yǔ)法糖功夫瑜伽注意在里面可以不用返回東西因?yàn)闀?huì)調(diào)用關(guān)鍵字來(lái)創(chuàng)建對(duì)象。

AngularJS 的供應(yīng)商($provide)

$provide 服務(wù)負(fù)責(zé)告訴 AngularJS 如何創(chuàng)建一個(gè)新的可注入的東西: 即服務(wù)。

服務(wù)會(huì)被叫做供應(yīng)商的東西來(lái)定義, 可以使用 $provide 來(lái)創(chuàng)建一個(gè)供應(yīng)商。

創(chuàng)建供應(yīng)商的方法:

使用 $provide 中的 provider() 方法來(lái)定義一個(gè)供應(yīng)商;

通過(guò)要求 $provide 被注入一個(gè)應(yīng)用的 config 函數(shù)中來(lái)獲得 $provide 服務(wù);

定義供應(yīng)商的方法們

constant

value

service

factory

provider

decorator

1. constant

定義常量的, 它定義的值不能被改變, 它可以被注入到任何地方, 但是不能被裝飾器(decorator) 裝飾。

DEMO:

HTML 代碼:





    demo
    
    



    

JS 代碼:

var myApp = angular.module("myApp", [])
myApp.config(function($provide) {
    $provide.constant("movieTitle", "功夫瑜伽")
})
myApp.controller("myController", function(movieTitle) {
    console.log("movieTitle: ", movieTitle);
})

語(yǔ)法糖:

myApp.constant("movieTitle", "功夫瑜伽")
2. value

它可以是 string、 number、 function, 它和 constant 的不同之處在于, 它可以被修改, 不能被注入到 config 中, 但是它可以被 decorator 裝飾。

HTML 代碼:





    demo
    
    



    

JS 代碼:

var myApp = angular.module("myApp", [])

myApp.config(function($provide) {
    $provide.value("movieTitle", "功夫瑜伽")
})

myApp.controller("myController", function(movieTitle) {
    console.log("movieTitle: ", movieTitle);
})

語(yǔ)法糖:

myApp.value("movieTitle", "功夫瑜伽")
3. service

它是一個(gè)可注入的構(gòu)造器, 在 AngularJS 中它是單例的, 用它在 Controller 中通信或者共享數(shù)據(jù)都合適

var myApp = angular.module("myApp", [])

myApp.config(function($provide) {
    $provide.service("movie", function() {
        this.title = "功夫瑜伽"
    })
})

myApp.controller("myController", function(movie) {
    console.log("movieTitle: ", movie.title);
})

語(yǔ)法糖:

myApp.service("movie", function () {
    this.title = "功夫瑜伽"
})

注意:

service 里面可以不用返回東西, 因?yàn)?AngularJS 會(huì)調(diào)用 new 關(guān)鍵字來(lái)創(chuàng)建對(duì)象。但是返回一個(gè)自定義對(duì)象好像也不會(huì)有錯(cuò)。

4. factory

它是一個(gè)可注入的 function, 它和 service 的區(qū)別就是: factory 是普通的 function, 而 service 是一個(gè)構(gòu)造器(constructor), 這樣 AngularJS 在調(diào)用 service 時(shí)會(huì)用 new 關(guān)鍵字, 而調(diào)用 factory 時(shí)只是調(diào)用普通的 function, 所以 factory 可以返回任何東西, 而 service 可以不返回 (可查閱 new 關(guān)鍵字的作用)

var myApp = angular.module("myApp", [])

myApp.config(function($provide) {
    $provide.factory("movie", function() {
        return {
            title: "功夫瑜伽"
        }
    })
})

myApp.controller("myController", function(movie) {
    console.log("movieTitle: ", movie.title);
})

語(yǔ)法糖:

$provide.factory("movie", function() {
    return {
        title: "功夫瑜伽"
    }
})

注意:

factory 可以返回任何東西, 它實(shí)際上是一個(gè)只有 $get 方法的 provider

5. provider

provider 是他們的老大, 上面的幾乎(除了 constant) 都是 provider 的封裝, provider 必須有一個(gè) $get 方法, 當(dāng)然也可以說(shuō) provider 是一個(gè)可配置的 factory。

JS 代碼:

var myApp = angular.module("myApp", [])

myApp.provider("movie", function() {
    var version
    return {
        setVersion: function(value) {
            version = value
        },
        $get: function() {
            return {
                title: "功夫瑜伽 " + version
            }
        }
    }
})

myApp.config(function(movieProvider) {
    movieProvider.setVersion("正在熱播")
})

myApp.controller("myController", function(movie) {
    console.log("movieTitle: ", movie.title);
})

注意:

這里 config 方法注入的是 movieProvider, config 方法中只能注入供應(yīng)商(兩個(gè)例外是 $provide$injector),用駝峰命名法寫(xiě)成 movieProvider, AngularJS 會(huì)自動(dòng)幫你注入它的供應(yīng)商。

movie 是一個(gè)供應(yīng)商

6.decorator

decorator 不是 provider, 它是用來(lái)裝飾其它 provider 的, 它不能裝飾 constant(因?yàn)?constant 不是通過(guò) provider() 方法創(chuàng)建的)。

JS 代碼:

var myApp = angular.module("myApp", [])

// myApp.value("movieTitle", "功夫瑜伽6")
myApp.config(function($provide) {
    $provide.value("movieTitle", "功夫瑜伽7")

    $provide.decorator("movieTitle", function($delegate) {
        return $delegate + " - 測(cè)試"
    })
})

myApp.controller("myController", function(movieTitle) {
    console.log("movieTitle: ", movieTitle);
})
總結(jié)

所有的供應(yīng)商都只被實(shí)例化一次, 也就是說(shuō)它們都是單例的

除了 constant, 所有的供應(yīng)商都可以被裝飾器(decorator)裝飾

value 就是一個(gè)簡(jiǎn)單可注入的值

service 是一個(gè)可注入的構(gòu)造器

factory 是一個(gè)可注入的方法

decorator 可以修改或封裝其他的供應(yīng)商(除了 constant)

provider 是一個(gè)可配置的 factory

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/86877.html

相關(guān)文章

  • AngularJSProvider們:ServiceFactory區(qū)別

    摘要:引言看了很多文章可能還是不太說(shuō)得出中的幾個(gè)創(chuàng)建供應(yīng)商的方法到底有啥區(qū)別,啥時(shí)候該用啥,之前一直傻傻分不清楚,現(xiàn)在來(lái)總結(jié)一下。 引言 看了很多文章可能還是不太說(shuō)得出AngularJS中的幾個(gè)創(chuàng)建供應(yīng)商(provider)的方法(factory(),service(),provider())到底有啥區(qū)別,啥時(shí)候該用啥,之前一直傻傻分不清楚,現(xiàn)在來(lái)總結(jié)一下。 下文中泛指統(tǒng)一用中文,英文即為特...

    jone5679 評(píng)論0 收藏0
  • AngularJSfactoryserviceprovider區(qū)別

    摘要:首先創(chuàng)建我們的構(gòu)造函數(shù)這是一個(gè)典型的構(gòu)造函數(shù)。所以,我們首先知道的就是無(wú)論我們是否能夠在代碼里面看見(jiàn),構(gòu)造函數(shù)是會(huì)返回一個(gè)對(duì)象的。 翻譯自 http://tylermcginnis.com/angularjs-factory-vs-service-vs-provider/ 當(dāng)你開(kāi)始使用Angular的時(shí)候,你會(huì)發(fā)現(xiàn),你總是會(huì)讓你的控制器和作用域充滿(mǎn)各種不必要的邏輯。你應(yīng)該早點(diǎn)意識(shí)到一個(gè)...

    lanffy 評(píng)論0 收藏0
  • AngularJs 入門(mén)(二)--模塊

    摘要:同名模塊已經(jīng)初始化的模塊保存在一個(gè)叫的緩存對(duì)象中,是模塊名,是模塊對(duì)象。調(diào)用注入器的方法執(zhí)行模塊的所有方法。檢查該注入器中是否存在指定的服務(wù)。如果是數(shù)組,最后一個(gè)必須是的構(gòu)造函數(shù),前面的就是構(gòu)造函數(shù)的參數(shù)名。 模塊 模塊是指寫(xiě)Angular應(yīng)用的代碼片段,這樣可以使代碼分離開(kāi)來(lái),因此代碼會(huì)更好維護(hù),可讀和測(cè)試。還可以在module里定義代碼依賴(lài)關(guān)系,可以調(diào)用一個(gè)模塊,再在代碼中定義這個(gè)...

    Yangyang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<