在另一个指令中嵌入AngularJS指令

时间:2015-12-28 10:03:30

标签: javascript angularjs angularjs-directive angular-ui angular-ui-typeahead

我试图在新指令中实现Bootstrap Typeahed的一些自定义函数。 这样做,我需要将原始的Typeahed指令嵌入到我的传递中,传递它,我的参数:

这是最初的指令:

<div class="typeahead typeahead-lookup">
    <input ng-model="vm.myModel" 
           uib-typeahead="item as item.Formatted for item in vm.refreshSearch($viewValue)"
           typeahead-wait-ms="1000"
           typeahead-min-length="1"
           typeahead-editable="false"
           placeholder="SEARCH..."
           type="text"
           class="form-control">
</div>

这是我的自定义指令:

<select-lookup model="vm.myModel" 
               items="item as item.Formatted for item in vm.refreshSearch($viewValue)" 
</select-lookup>

这就是我尝试实现它的方式:

function selectLookup($compile) {
        return {
            restrict: 'E',
            scope: {
              model: "=",
              items: "@"
            },
            compile: function(element, attrs) {
                return function(scope, element, attrs) {
                    var template = '<div class="typeahead typeahead-lookup">' +
                                        '<input ng-model="model"' +
                                               'uib-typeahead="{{items}}"' +
                                               'typeahead-wait-ms="1000"' +
                                               'typeahead-min-length="1"' +
                                               'typeahead-editable="false"' +
                                               'placeholder="SEARCH..."' +
                                               'type="text"' +
                                               'class="form-control">' +
                                   '</div>';

                    element.html(template);

                    $compile(element.contents())(scope);
                };

            }
        };
    }

我在将指令中的参数传递给原始的Typeahead指令时遇到了问题,尤其是&#34; items&#34;。 我收到此错误:Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "{{items}}"

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我会尝试'uib-typeahead=' + attrs.items +而不是'uib-typeahead="{{items}}"'

Typeahead正在使用自定义解析器来实现&#39;句法。 https://github.com/angular-ui/bootstrap/blob/master/src/typeahead/typeahead.js#L7