javascript - 为什么在尝试使用自定义指令时出现错误。

标签 javascript angularjs data-binding angularjs-directive

我正在使用 this在我的教程项目中实现 DropdownmultiSelect 的链接。

这里是我如何在我的教程项目中定义指令:

(function () {
    "use strict";

    angular.module("gameBuilder").directive('dropdownMultiselect', [dropdownMultiselect]);

    function dropdownMultiselect() {
        return {
            restrict: 'E',
            scope: {
                model: '=',
                options: '=',
                pre_selected: '=preSelected'
            },
            template: "<div class='btn-group' data-ng-class='{open: open}'>" +
             "<button class='btn btn-small'>Select</button>" +
                     "<button class='btn btn-small dropdown-toggle' data-ng-click='open=!open;openDropdown()'><span class='caret'></span></button>" +
                     "<ul class='dropdown-menu' aria-labelledby='dropdownMenu'>" +
                         "<li><a data-ng-click='selectAll()'><i class='icon-ok-sign'></i>  Check All</a></li>" +
                         "<li><a data-ng-click='deselectAll();'><i class='icon-remove-sign'></i>  Uncheck All</a></li>" +
                         "<li class='divider'></li>" +
                         "<li data-ng-repeat='option in options'> <a data-ng-click='setSelectedItem()'>{{option.name}}<span data-ng-class='isChecked(option.id)'></span></a></li>" +
                     "</ul>" +
                 "</div>",

            controller: function ($scope) {

                $scope.openDropdown = function () {
                    $scope.selected_items = [];
                    for (var i = 0; i < $scope.pre_selected.length; i++) {
                        $scope.selected_items.push($scope.pre_selected[i].id);
                    }
                };

                $scope.selectAll = function () {
                    $scope.model = _.pluck($scope.options, 'id');
                    console.log($scope.model);
                };
                $scope.deselectAll = function () {
                    $scope.model = [];
                    console.log($scope.model);
                };
                $scope.setSelectedItem = function () {
                    var id = this.option.id;
                    if (_.contains($scope.model, id)) {
                        $scope.model = _.without($scope.model, id);
                    } else {
                        $scope.model.push(id);
                    }
                    console.log($scope.model);
                    return false;
                };
                $scope.isChecked = function (id) {
                    if (_.contains($scope.model, id)) {
                        return 'icon-ok pull-right';
                    }
                    return false;
                };
            }
        }

    }
})();

Controller 定义如下:

    (function () {
    "use strict";
    angular.module("gameBuilder", ["ui.router", "templates"])
        .config([
            "$stateProvider",
            function ($stateProvider) {
                $stateProvider
                    .state("gameBuilder", {
                        abstract: true,
                        url: "/gameBuilder",
                        template: "<ui-view></ui-view>"
                    })
                    .state("gameBuilder.list", {
                        url: "/",
                        templateUrl: "app/gameBuilder/templates/gameBuilderList.tmpl.html",
                        controller: "gameBuilderListController",
                        controllerAs: "list"
                    })
                    .state("gameBuilder.view", {
                        url: "/:gameId",
                        templateUrl: "app/gameBuilder/templates/gameBuilder.tmpl.html",
                        controller: "gameBuilderController",
                        controllerAs: "builder"
                    })
                .state("gameBuilder.view.step1", {
                    url: '/step1',
                    templateUrl: "../app/gameBuilder/templates/NestedViews/FormStep1.html"
                })
                .state("gameBuilder.view.step2", {
                    url: '/step2',
                    templateUrl: "../app/gameBuilder/templates/NestedViews/FormStep2.html"
                })
                .state("gameBuilder.view.step3", {
                    url: '/step3',
                    templateUrl: "../app/gameBuilder/templates/NestedViews/FormStep3.html"
                });
            }
        ]);
})();

下面是我在 View 中使用它的方式:

<div class="form-group">
        <dropdown-multiselect pre-selected="game.member.roles" model="game.selected_items" options="game.roles"></dropdown-multiselect>
        <pre>
            selected roles = {{game.selected_items | json}}
        </pre>
    </div>

但是我得到这个错误:

ReferenceError: _ is not defined
    at Scope.$scope.isChecked (inspectionsBuilder.js:150)
    at Object.$parseFunctionCall [as get] (angular.js:12332)
    at Scope.$digest (angular.js:14217)
    at Scope.$apply (angular.js:14488)
    at done (angular.js:9646)
    at completeRequest (angular.js:9836)
    at XMLHttpRequest.requestLoaded (angular.js:9777)

最佳答案

您是否添加了下划线/低破折号? “ReferenceError: _ is not defined”通常出现在你还没有加载库的时候

关于javascript - 为什么在尝试使用自定义指令时出现错误。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31853263/

相关文章:

javascript - React Recharts——从不同对象获取数据

css - 使用 webpack 更改路由时如何卸载 css?

asp.net-mvc - 在 ASP.NET MVC 中将引用数据加载到 View 模型中的可靠方法

c# - ComboBox DataBinding 导致 ArgumentException

wpf - 如何分配 INotifyPropertyChanged 的​​ PropertyChanged 事件?

javascript - 从 Express 路由引发异常时,未调用未处理的异常事件处理程序

javascript - 如何在 JavaScript 中使用除法

javascript - 输入文本不可选择

html - Angular Material Design 工具栏 - 格式问题

javascript - 基于键为 : [array of dropdown options] pairs? 的对象创建一系列下拉菜单