AngularJS自定义服务注入

时间:2016-04-05 18:57:04

标签: angularjs

我正在学习角度,这就是为什么有一段时间我不理解代码。我有一个角度定制服务的代码。首先看代码。

angular.module('yourModule').factory('alertService', function() {
    return {
        showError : function() {
            $.bigBox({
                title: title,
                content: content == null ? "An error occurred.<br /><br />If this error    persists, please contact support." : content,
                color: "#C46A69",
                //timeout: 6000,
                icon: "fa fa-warning shake animated",
                //number: "1",
                timeout: 3000
            });
        }
    };
});

然后你可以将它注入任何控制器并使用它:

angular.module('yourModule').controller('yourController', function($scope, alertService) {
   someFunction().success(function (result) {
       // great!
   }).error(function (error) {
       // call standard error message function
       alertService.showError("Update Failed"); // use default error message
   });
});

问题1

当注入内置服务时,我们使用$ sign这样的方式 $ scope或$ window等但是当注入自定义服务时,只需编写服务名称而不用$ sign为什么?

如果我们需要使用$ sign注入我自己的服务,那么会出现任何问题吗? 对于$ sign,我是否需要使用任何特定代码模式创建服务?

问题2

showError : function() {

}

我们可以像这样声明上面的函数名吗

this.showError = function() {

  };

$scope.showError = function() {

    }
如果我的理解有问题,请纠正我。

4 个答案:

答案 0 :(得分:5)

问题#1 $ sign用于角度内置服务,因此您可以区分核心服务和内置服务。建议您不要将$用于自己的服务

问题#2: 没有。您正在返回一个对象,showError是对象的键,函数是值。对象键始终定义为

{
   showError: function (){
   }
}

以下模式通常与控制器一起使用,而不是服务。

this.showError = function() {
};

$scope.showError = function() {
}

答案 1 :(得分:3)

  1. 因为角度服务的名称中包含$,而您的服务没有。这是一个使用angular的约定,以确保框架服务名称不会与您自己的服务名称冲突。如果用$命名自己的服务,就会毁了它。因此,请勿使用领先的$。

  2. 命名您的服务
  3. 没有。服务不能注入范围,因为服务是应用程序的全局服务,而不是特定于特定页面的服务。使用this.showError会将函数绑定到工厂,而不是将其绑定到工厂返回的对象(即正在定义的服务)。如果您使用this.showError方法而非service()方法声明服务,则可以使用factory()。请阅读the documentation,了解有关定义服务的各种方法的说明。

答案 2 :(得分:1)

//creating the module ,controller and registering with the module all done in one line
//Use the method chaining mechnism as show below:
var myApp = angular.module('myModule', []).controller("myController",function($scope,stringService){
	console.log("Hi");
	$scope.transformString = function(input){
		
		console.log("Hello");
		$scope.output = stringService.processString(input);
	}

	
});

//Above is Controller file//
//below is custom service.You can put into separate file and reuse it another Controller //
myApp.factory('stringService',function(){
	 return {
	 	processString:function(input){
	 		if(!input){
				return input;
			}
			var output ="";
			for(var i = 0; i<input.length;i++){
				if(i > 0 && input[i] == input[i].toUpperCase()){
					output = output + " ";
				}
				output = output + input[i];
			}
			return output;

	 	}
	 }
});
table{
	border-collapse: collapse;
	font-family: Arial;
}
td{
	border: 1px solid black;
	padding: 5px;
}
th{
	border:1px solid black;
	padding: 5px;
	text-align: left;
}
<!DOCTYPE html>
<html>
<head>
	<title>Angularjs- Custom Services in Angular</title>
	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script>
	<script type="text/javascript" src="script.js"></script>
	<script type="text/javascript" src="StringService.js"></script>
	<link rel="stylesheet" href="style.css">
</head>
<body >
<p> What is a services in an Angular Application?<br>
	Why do we need services in an angular application?
	<br>
	What are the benefits of using services?
  
</p>
<div ng-app="myModule">
	<div ng-controller="myController">
	
	
	<table border="1">
		
		<tbody>
			<tr>
				<td>Your String</td>
				<td><input type="text" ng-model="input" ></td>
			</tr>
			<tr>
				<td>Result</td>
				<td><input type="text" ng-model="output" ></td>
			</tr>
			<tr>
				<td></td>
				<td><input type="button" value="Process String" ng-click="transformString(input)" ></td>
			</tr>

		</tbody>
	</table>
	
</div>

</div>

</body>
</html>

答案 3 :(得分:0)

您可以使用AngularJs提供的自定义服务。 使用服务:

var module = angular.module('myapp', []);

module.service('userService', function(){
    this.users = ['John', 'James', 'Jake'];
});

您也可以使用工厂方法。

module.factory('userService', function(){

    var fac = {};

    fac.users = ['John', 'James', 'Jake']; 

    return fac;

});

供参考:http://viralpatel.net/blogs/angularjs-service-factory-tutorial/