回答編集履歴

2

コード追加

2016/11/01 10:18

投稿

pinpikokun
pinpikokun

スコア376

test CHANGED
@@ -15,3 +15,175 @@
15
15
 
16
16
 
17
17
  [変更リンク](http://plnkr.co/edit/fWu4it7ryUKzbyqmof7c?p=preview)
18
+
19
+
20
+
21
+
22
+
23
+ ```html
24
+
25
+ <html>
26
+
27
+ <head>
28
+
29
+ <link rel="stylesheet" href="style.css">
30
+
31
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>
32
+
33
+
34
+
35
+
36
+
37
+ <script>
38
+
39
+ angular.module('App', []).controller('TestController', function($scope) {
40
+
41
+
42
+
43
+
44
+
45
+ }).directive('directiv1', function($timeout){
46
+
47
+ return {
48
+
49
+ restrict: 'E',
50
+
51
+ scope: {} ,
52
+
53
+ require: '^directiveLoadingSpinner',
54
+
55
+ template: '<div id="d1"></div>',
56
+
57
+ link: function (scope, element, attr, parent) {
58
+
59
+ parent.loadStart();
60
+
61
+ $timeout(function() {
62
+
63
+ //いろいろな処理
64
+
65
+ document.getElementById('d1').innerHTML = "ディレクティブ1";
66
+
67
+ parent.loaded();
68
+
69
+ }, 500);
70
+
71
+ }
72
+
73
+ };
74
+
75
+ }).directive('directiv2', function($timeout){
76
+
77
+ return {
78
+
79
+ restrict: 'E',
80
+
81
+ scope: {} ,
82
+
83
+ require: '^directiveLoadingSpinner',
84
+
85
+ template: '<div id="d2"></div>',
86
+
87
+ link: function (scope, element, attr, parent) {
88
+
89
+ parent.loadStart();
90
+
91
+ $timeout(function() {
92
+
93
+ //いろいろな処理
94
+
95
+ document.getElementById('d2').innerHTML = "ディレクティブ2";
96
+
97
+ parent.loaded();
98
+
99
+ }, 2000);
100
+
101
+ }
102
+
103
+ };
104
+
105
+ }).directive('directiveLoadingSpinner', function(){
106
+
107
+ var loadCount = 0;
108
+
109
+ var directiveCount = 0;
110
+
111
+ return {
112
+
113
+ restrict: 'AEC',
114
+
115
+ controller: function($scope, $element) {
116
+
117
+ // コンテンツ非表示
118
+
119
+ $element.css('display','none');
120
+
121
+ // スピナー追加
122
+
123
+ $element.after('<div id="spinner"><div id=loading-bar-spinner><div class=spinner-icon></div></div></div>');
124
+
125
+
126
+
127
+ // directiveの件数カウント
128
+
129
+ this.loadStart = function(){
130
+
131
+ directiveCount += 1;
132
+
133
+ }
134
+
135
+
136
+
137
+ // directiveの読込終了
138
+
139
+ this.loaded = function(){
140
+
141
+ loadCount += 1;
142
+
143
+ if(loadCount === directiveCount){
144
+
145
+ $element.css('display','block');
146
+
147
+ document.getElementById('spinner').style.display = 'none';
148
+
149
+ }
150
+
151
+ }
152
+
153
+ }
154
+
155
+ };
156
+
157
+ });
158
+
159
+
160
+
161
+ </script>
162
+
163
+ </head>
164
+
165
+ <body ng-app="App">
166
+
167
+ <div ng-controller="TestController">
168
+
169
+
170
+
171
+ <div directive-loading-spinner>
172
+
173
+ TEST
174
+
175
+ <directiv1></directiv1>
176
+
177
+ <directiv2></directiv2>
178
+
179
+ </div>
180
+
181
+
182
+
183
+ </div>
184
+
185
+ </body>
186
+
187
+ </html>
188
+
189
+ ```

1

修正

2016/11/01 10:18

投稿

pinpikokun
pinpikokun

スコア376

test CHANGED
@@ -3,3 +3,15 @@
3
3
 
4
4
 
5
5
  [リンク](http://plnkr.co/edit/AEjCQAyO3a0cDaH0WH6e?p=preview)
6
+
7
+
8
+
9
+
10
+
11
+ いまいちな作りですがdirective数を取得するようにしました.
12
+
13
+ 自分もよい方法を知りたいです.
14
+
15
+
16
+
17
+ [変更リンク](http://plnkr.co/edit/fWu4it7ryUKzbyqmof7c?p=preview)