いろいろと不明なことが多いのでピンポイントの回答になってませんが、以下のことが考えられます。
- func1() を宣言しているコントローラースコープの外側で $('div').append() が実行されている。
これは func1() が controller1 で宣言されているが、$('div')で参照されるHTML要素が controller1 の外側にある、というようなケースです。新しいHTML要素の挿入先を再確認しましょう。
- $('div').append() がAngularJSによってトラッキングされていない。
$('div').append() の処理が、どのような流れで実行されたのか再確認しましょう。AngularJSの世界では、HTML要素の動的な変更はすべてAngularJSによってトラッキングされている必要があります。簡単な例として、setTimeout() によるタイムアウト時に$('div').append()が実行されてしまうと、AngularJSはこのコードが実行されたことを知ることができません。このため ng-click の設定が認識されません。
(追記)標準ディレクティブを使って動的エレメントを生成する例
HTML
1<!DOCTYPE html>
2<html>
3<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
4
5<body ng-app="myApp" ng-controller="myCtrl">
6<button ng-click="buttonClick()">click</button>
7
8<div ng-if="clicked">
9 <p ng-repeat="data in dataList" ng-click="dataClick1()" onclick="dataClick2()">{{data}}</p>
10</div>
11
12<script>
13var app = angular.module("myApp", []);
14app.controller("myCtrl", function($scope) {
15 $scope.dataList = [
16 "aaa",
17 "bbb",
18 "ccc",
19 "ddd",
20 ];
21 $scope.clicked = false;
22 $scope.buttonClick = function() {
23 $scope.clicked = true;
24 };
25 $scope.dataClick1 = function() {
26 console.log("dataClick1");
27 }
28});
29
30function dataClick2() {
31 console.log("dataClick2");
32}
33
34</script>
35
36</body>
37</html>
38
動的なエレメント作成は、上記のようにangularjsの標準ディレクティブを使って行われるべきです。
また、上記のように ng-click と onclick を同時に使うことはできますが、onclick の必要性を再検討して、できる限り ng-click だけで目的の処理ができるように、設計を見直すことをお勧めします。