了解 AngularJS $compile函数

Understanding the AngularJS $compile function

本文关键字:函数 compile AngularJS 了解      更新时间:2023-09-26

我尝试使用 AngularJS 构建带有 n 个子菜单的菜单。 这是我的范围:

$scope.menu = [
                    {"type": "folder", "name": "TestFolder1", "subfolder": []},
                    {"type": "folder", "name": "TestFolder2", "subfolder": [
                        {"type": "folder", "name": "TestFolder2", "subfolder": [
                            {"type": "folder", "name": "TestFolder2", "subfolder": []},
                            {"type": "folder", "name": "TestFolder2", "subfolder": []}
                        ]},
                        {"type": "folder", "name": "TestFolder2", "subfolder": []}
                    ]},
                    {"type": "file", "name": "testfile"}
            ];

这是我的指示

codeApp.directive('item', ['$compile', function ($compile) {
        return {
            restrict: 'E',
            replace: true,
            scope: {
                item: '='
            },
            template: '<li>'+
            '<a id="item"><i class="fa fa-code-fork fa-fw"></i>{{item.name}}</a>'+
            '</li>',
            link: function($scope, $element) {
                if (angular.isArray($scope.item.subfolder) && $scope.item.subfolder.length > 0) {
                    $element.append('<ul><item ng-repeat="childItem in item.subfolder" item="childItem"></item></ul>');
                    $compile($element.contents())($scope);
                }
            }
        };
    }]);

我的第一行是这样的:

<item ng-repeat="item in menu" item="item"></item>

菜单已创建,但仅第一级和我不确定编译函数是如何工作的。 如何实现将行追加在 ?

我认为这里已经讨论了类似的问题:https://stackoverflow.com/a/18609594/4360457

答案包括一个 plunkr 示例,并且解释得很好。