回答編集履歴

1

サンプルコードを追記

2018/07/05 05:59

投稿

tkanda
tkanda

スコア2425

test CHANGED
@@ -15,3 +15,93 @@
15
15
 
16
16
 
17
17
  $('div').append() の処理が、どのような流れで実行されたのか再確認しましょう。AngularJSの世界では、HTML要素の動的な変更はすべてAngularJSによってトラッキングされている必要があります。簡単な例として、setTimeout() によるタイムアウト時に$('div').append()が実行されてしまうと、AngularJSはこのコードが実行されたことを知ることができません。このため ng-click の設定が認識されません。
18
+
19
+
20
+
21
+ ### (追記)標準ディレクティブを使って動的エレメントを生成する例
22
+
23
+ ```HTML
24
+
25
+ <!DOCTYPE html>
26
+
27
+ <html>
28
+
29
+ <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
30
+
31
+
32
+
33
+ <body ng-app="myApp" ng-controller="myCtrl">
34
+
35
+ <button ng-click="buttonClick()">click</button>
36
+
37
+
38
+
39
+ <div ng-if="clicked">
40
+
41
+ <p ng-repeat="data in dataList" ng-click="dataClick1()" onclick="dataClick2()">{{data}}</p>
42
+
43
+ </div>
44
+
45
+
46
+
47
+ <script>
48
+
49
+ var app = angular.module("myApp", []);
50
+
51
+ app.controller("myCtrl", function($scope) {
52
+
53
+ $scope.dataList = [
54
+
55
+ "aaa",
56
+
57
+ "bbb",
58
+
59
+ "ccc",
60
+
61
+ "ddd",
62
+
63
+ ];
64
+
65
+ $scope.clicked = false;
66
+
67
+ $scope.buttonClick = function() {
68
+
69
+ $scope.clicked = true;
70
+
71
+ };
72
+
73
+ $scope.dataClick1 = function() {
74
+
75
+ console.log("dataClick1");
76
+
77
+ }
78
+
79
+ });
80
+
81
+
82
+
83
+ function dataClick2() {
84
+
85
+ console.log("dataClick2");
86
+
87
+ }
88
+
89
+
90
+
91
+ </script>
92
+
93
+
94
+
95
+ </body>
96
+
97
+ </html>
98
+
99
+
100
+
101
+ ```
102
+
103
+
104
+
105
+ 動的なエレメント作成は、上記のようにangularjsの標準ディレクティブを使って行われるべきです。
106
+
107
+ また、上記のように ng-click と onclick を同時に使うことはできますが、onclick の必要性を再検討して、できる限り ng-click だけで目的の処理ができるように、設計を見直すことをお勧めします。