0

我已经看到了一些使用 AngularJS 的选项卡示例,而很少看到使用 AngularJS 的 JQueryUI 选项卡,因此我尝试创建两个指令来创建选项卡容器和选项卡项。

这是我创建的示例代码:http: //jsfiddle.net/davidzapata/tvq6w1g9/2/

HTML

<div ng-app="biApp">
    <div ng-controller="MyCtrl">
        <h1>{{greeting}}</h1>
        <jqueryuitabs>
            <jqueryuitab id="tab1" title="Tab 1">Tab 1 content</jqueryuitab>
            <jqueryuitab id="tab2" title="Tab 2">Tab 2 content</jqueryuitab>
            <jqueryuitab id="tab3" title="Tab 3">Tab 3 content</jqueryuitab>
        </jqueryuitabs>
    </div>
</div>

JS

var appModule = angular.module('biApp', []);

appModule.controller('MyCtrl', function($scope){
    $scope.greeting = 'Hi!';
});

appModule.directive('jqueryuitabs', function () {
    return {
        restrict: 'E',
        transclude: true,
        template: '<div><ul><li ng-repeat="tab in tabs"><a href="#{{tab.id}}">{{tab.title}}</a></li></ul><ng-transclude></ng-transclude></div>',
        controller: function($scope) {
            console.log('jqueryuitabs Controller');
            $scope.tabs = [];

            this.addTab = function(tab){
                console.log('Add Tab', tab);
                $scope.tabs.push(tab);
            }
        },
        link: function(scope, elm, attrs) {
            console.log('jqueryuitabs link');
            var jqueryElm = $(elm[0]);
            $(jqueryElm).tabs();
        }
    };
});

appModule.directive('jqueryuitab', function () {
    return {
        restrict: 'E',
        require: '^jqueryuitabs',
        transclude: true,
        scope: {
            id: "@",
            title: "@"
        },
        template: '<div id="{{id}}" ng-transclude></div>',
        link: function (scope, element, attrs, tabsCtrl) {
            console.log('Tab link');

            tabsCtrl.addTab(scope);
        }
    };
});

我以前从未在 jsfiddle.net 中创建过代码,但该代码似乎加载了所需的库。即便如此,控制器工作,“问候”模型被渲染,但选项卡不起作用,它们甚至没有将内容嵌入到相应的元素中。

当然,我是一个使用AngularJS的新手,但我还没有想出如何解决这个问题。

谢谢!

4

2 回答 2

3

在jqueryuitabs指令中使用ng-transcludediv :

template: '<div><ul><li ng-repeat="tab in tabs"><a href="#{{tab.id}}">{{tab.title}}</a></li></ul><div ng-transclude></div></div>'

jsfiddle

于 2014-10-27T23:19:55.557 回答
1

停止自定义实现并使用http://angular-ui.github.io/bootstrap/。它更高效,您可以继续专注于更重要的任务

于 2014-10-28T07:55:46.590 回答