forked from daniellmb/angular-test-patterns
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
167 lines (143 loc) · 3.26 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/**
Example AngularJS Application
=============================
Please Note: that this example is configured into a single file to be succinct... not maintainable.
You'll want to break yours out into separate files and folders as needed.
Configure Application
---------------------
Declare module dependencies and routes, then create and configure the app.
*/
'use strict';
// Declare module dependencies
var dependencies = [
'ngRoute',
'ngSanitize'
];
// Configure app
function config($routeProvider) {
$routeProvider
.when('/', {
// Use the same partial views for all languages
templateUrl: '../views/home.html',
controller: 'myCtrl'
})
.when('/about', {
// Use the same partial views for all languages
templateUrl: '../views/about.html'
})
.otherwise({
redirectTo: '/'
});
}
// Create app module and configure it
angular
.module('myApp', dependencies)
.config([
'$routeProvider',
config
]);
/**
Application Controllers
----------------------
*/
// Define My Controller
angular.module('myApp')
.controller('myCtrl', ['$scope', '$http', 'mySvc',
function ($scope, $http, mySvc) {
// Attach data types
$scope.myThing = {};
$scope.myArray = [];
$scope.myBoolean = true;
$scope.myDate = new Date();
$scope.myMethod = function () {
return 'Not implemented';
};
$scope.myNull = null;
$scope.myNumber = 1337;
$scope.myObject = {};
$scope.myRegExp = /\s/;
$scope.myString = 'test';
$scope.myUndefined = undefined;
// Call service method
mySvc.myMethod({});
}]);
/*
Application Directives
----------------------
*/
// Define My Directive
angular.module('myApp')
.directive('myDir', [function () {
return {
template: '<div></div>',
restrict: 'EAC',
require: 'ngModel',
link: function (scope, element, attrs) {
return element.text('this is my directive');
}
};
}
]);
/**
Application Filters
----------------------
*/
// Define My Filter
angular.module('myApp')
.filter('myFltr', [function () {
return function (input) {
return 'my filter: ' + input;
};
}
]);
/*
Application Services
----------------------
Rather than putting everything in a single return, this pattern of breaking out the exports into
separate functions encurages simple methods that have a single purpose.
*/
angular.module('myApp')
.factory('mySvc', function factoryInit(myVal) {
// check for required dependency
if (!myVal) {
throw new Error('mySvc: myVal not provided');
}
/*
Adds public myMethod to the api
*/
function exportMyMethod(api) {
api.myMethod = function () {
return 'Not implemented';
};
}
function getAPI() {
// export public properties
var publicAPI = {
myThing: {},
myArray: [],
myBoolean: true,
myDate: new Date(),
myNull: null,
myNumber: 1337,
myObject: {},
myRegExp: /\s/,
myString: 'test',
myUndefined: undefined
};
// add public methods
exportMyMethod(publicAPI);
// return api
return publicAPI;
}
//return public API
return getAPI();
})
// 'provide' global variable dependency (so it can be mocked)
.value('myVal', window.myVal);
/*
Application Constants
----------------------
*/
// Define My Constant
angular.module('myApp')
.constant('myConst', 42);