? ? ? ? ??
?/*
?provider可以封裝(value factory service constant除外),provider必須有一個(gè)$get方法
? ? ? ? 使用provider的時(shí)候,我們不能單獨(dú)的配置,需要在config中來創(chuàng)建provider,在angular中在config中
? ? ? ? 只能注入提供服務(wù)的應(yīng)用商,但是angualr提供了一個(gè)$provide,因此在使用provider的時(shí)候在config中注入
? ? ? ? 的應(yīng)該是$provide,通過$provider創(chuàng)建provider
? ? ? ? provider是唯一一種可以創(chuàng)建用來注入到config()函數(shù)的服務(wù)的方式吟逝。想在你的服務(wù)啟動(dòng)之前,進(jìn)行一些模塊化的配置的話,就使用provider也榄。
? ? ? ? ? $provide服務(wù)負(fù)責(zé)告訴Angular如何創(chuàng)造一個(gè)新的可注入的東西:即服務(wù)。服務(wù)會(huì)被叫做供應(yīng)商的東西來定義司志,你可以使用$provide來創(chuàng)建一個(gè)供應(yīng)商甜紫。你需要使用$provide中的provider()方法來定義一個(gè)供應(yīng)商,同時(shí)你也可以通過要求$provide被注入到一個(gè)應(yīng)用的config函數(shù)中來獲得$provide服務(wù)骂远。使用方法是返回一個(gè)$get函數(shù)囚霸,注意在config階段,只有provider能被注入激才。
? ? ? */
? ? ? ? //注冊模塊
? ? ? ? ? var app=angular.module("app",[]);
? ? ? ? ? //注冊控制器 將value對象注入到控制器中
? ? ? ? ? app.controller("myCtrl",function($scope,myProvider,greeting){
? ? ? ? ? ? ? myProvider.f("我是 provider");
? ? ? ? ? ? ? console.log(myProvider.num);
? ? ? ? ? ? ? greeting("greeting");
? ? ? ? ? });
? ? ? ? ? app.provider("myProvider",function(){
? ? ? ? ? ? this.number='123';
? ? ? ? ? ? //provider創(chuàng)建服務(wù)的時(shí)候拓型,唯一可以讓控制器訪問的屬性和方法是在$get()函數(shù)里返回的屬性和方法。上面的代碼將$get添加到了this上面瘸恼,最終這個(gè)函數(shù)會(huì)被返回劣挫。
? ? ? ? ? ? this.$get=function(){ //必須要有
? ? ? ? ? ? ? ? var n=this.number;
? ? ? ? ? ? ? ? return {
? ? ? ? ? ? ? ? ? f:function(name){
? ? ? ? ? ? ? ? ? ? ? console.log("heler"+name);
? ? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? num:n};
? ? ? ? ? ? }
? ? ? ? ? });
? ? ? ? ? //使用provider來創(chuàng)建服務(wù)的目的就是為了能夠通過myApp.config()函數(shù)修改一些變量來傳遞到最終的項(xiàng)目中 myApp.config中能修改的變量必須是在this上的,因此我們能修改number的值
? ? ? ? ? //不注入provider 值得注意的是:config中只能夠傳遞提供服務(wù)的供應(yīng)商东帅,而此時(shí)使用者中方法的話MyProvider是一個(gè)服務(wù)揣云,
? ? ? ? ? //因此我們要在后面使用駝峰命名法為其加上Provider,其變成了MyProviderProvider
? ? ? ? ? // config里允許注入的是provider和constance(常量)冰啃,run里允許注入的是provider和constant,還可以是factory邓夕,service刘莹,value
? ? ? ? ? app.config(function(myProviderProvider){
? ? ? ? ? ? ? console.log(myProviderProvider)//{number: "123", $get: ?} config中的內(nèi)容先輸出
? ? ? ? ? ? ? myProviderProvider.number="我是改過后的值";
? ? ? ? ? ? ? console.log(myProviderProvider);
? ? ? ? ? });
? ? ? ? ? //注入provider
? ? ? ? ? app.config(function($provide){
? ? ? ? ? ? ? //console.log($provide)//{provider: ?, factory: ?, service: ?, value: ?, constant: ?,?…}
? ? ? ? ? ? ? $provide.provider('greeting',function(){? //通過$provide.provider()進(jìn)行自定義服務(wù)
? ? ? ? ? ? ? ? ? this.$get = function() {?
? ? ? ? ? ? ? ? ? ? return function(name) {?
? ? ? ? ? ? ? ? ? ? console.log("Hello," + name);?
? ? ? ? ? ? ? ? ? ? };?
? ? ? ? ? ? ? ? ? };?
? ? ? ? ? ? ? });
? ? ? ? ? });