AngularJS中的Provider们:Service和Factory等的区别
<html lang="zh" ng-app="myApp">
<head>
<meta charset="UTF-8" />
<title>AngularJS入门学习title>
<script src="../public/js/angular.min.js">script>
head>
<body>
<div ng-controller="ctrl">
{{myname}}
div>
<script>
var app = angular.module('myApp', [])
app.config(function ($provide) {
$provide.constant('movieTitle', 'The Matrix')
})
app.controller('ctrl', function ($scope, movieTitle) {
$scope.myname = movieTitle
})
script>
body>
html>
<html lang="zh" ng-app="myApp">
<head>
<meta charset="UTF-8" />
<title>AngularJS入门学习title>
<script src="../public/js/angular.min.js">script>
head>
<body>
<div ng-controller="ctrl">
{{myname}}
div>
<script>
var app = angular.module('myApp', [])
app.config(function ($provide) {
$provide.value('movieTitle', 'The Matrix 3232432')
})
app.controller('ctrl', function ($scope, movieTitle) {
$scope.myname = movieTitle
})
script>
body>
html>
<html lang="zh" ng-app="myApp">
<head>
<meta charset="UTF-8" />
<title>AngularJS入门学习title>
<script src="../public/js/angular.min.js">script>
head>
<body>
<div ng-controller="ctrl">
{{myname}}
div>
<script>
var app = angular.module('myApp', [])
app.config(function ($provide) {
$provide.service('movieService', [function () {
this.title = 'The Matrix'
this.testAction = function () {
alert(this.title)
}
}])
})
app.controller('ctrl', ['movieService', function (movieService) {
console.log(movieService)
debugger
movieService.testAction()
}])
script>
body>
html>
1 .它是一个可注入的function,
2. 它和service的区别就是:factory是普通function,而service是一个构造器(constructor),这样Angular在调用service时会用new关键字,而调用factory时只是调用普通的function,
3. 所以factory可以返回任何东西,而service可以不返回(可查阅new关键字的作用)
var app = angular.module('myApp', [])
app.config(function ($provide) {
$provide.factory('movie', function () {
return {
title: 'The Matrix',
}
})
})
app.controller('ctrl', function ($scope, movie) {
console.log(movie)
$scope.myname = movie.title
debugger
})
<html lang="zh" ng-app="myApp">
<head>
<meta charset="UTF-8" />
<title>AngularJS入门学习title>
<script src="../public/js/angular.min.js">script>
head>
<body>
<div ng-controller="ctrl">
{{myname}}
div>
<script>
var app = angular.module('myApp', [])
app.provider('movie', function () {
var version
return {
setVersion: function (value) {
version = value
},
$get: function () {
return {
title: 'The Matrix' + ' ' + version,
}
},
}
})
app.config(function (movieProvider) {
movieProvider.setVersion('Reloaded')
})
app.controller('ctrl', function (movie) {
console.log(movie)
debugger
})
script>
body>
html>
注意这里config方法注入的是movieProvider,上面定义了一个供应商叫movie,但是注入到config中不能直接写movie,因为前文讲了注入的那个东西就是服务,是供应商提供出来的,而config中又只能注入供应商(两个例外是 p r o v i d e 和 provide和 provide和injector),所以用驼峰命名法写成movieProvider,Angular就会帮你注入它的供应商。