javascript - 具有功能的 Angular UI Bootstrap Typeahead 模板 ng-src

标签 javascript angularjs angular-ui-bootstrap angular-ui-typeahead

我想知道如何在 Typeahead 的自定义模板的 ng-src 属性中使用一个函数。这是我的 html 模板:

<script type="text/ng-template" id="customTemplate.html">
    <a>
        <img ng-src="getWikiImgs({{match.model}})" width="16">
        <span bind-html-unsafe="match.label | typeaheadHighlight:query"></span>
    </a>
</script>
<div class="col-xs-10 center alt-txt-light">
    <span class="dash-pg-header-txt">Index an author!</span>
    <br/>
    <hr class="hr-separator"/>
    <br/>
    <div style="height: 1000px;">
        <h4>Search Wikipedia:</h4>
        <input type="text" ng-model="asyncSelected" placeholder="ie: John Bunyan" typeahead="item for item in getWikiResults($viewValue)" typeahead-wait-ms="500" typeahead-loading="loadingWikiResults" typeahead-template-url="customTemplate.html" class="form-control" />
        <br/>
        <i ng-show="loadingWikiResults" class="fa fa-refresh" style="text-align:left; float:left;"></i>
    </div>
</div>

所以在自定义模板脚本中,我尝试使用 ng-src 中的一个函数,根据 Typeahead 使用的“match.model”变量从维基百科获取相应的图像。

这是 Controller :

angular.module("app").controller("AuthorCreateController", function($scope, $state, 

$stateParams, $http) {

    $scope.getWikiResults = function($viewValue) {

        return $http.get('http://en.wikipedia.org/w/api.php?', {
            params: {
                srsearch: $viewValue,
                action: "query",
                list: "search",
                format: "json"
            }
        }).then(function($response){
            var items = [];
            angular.forEach($response.data.query.search, function(item){
                items.push(item.title);
            });
            return items;
        });
    };

    $scope.getWikiImgs = function(title) {

        $.getJSON("http://en.wikipedia.org/w/api.php?callback=?",
        {
            action: "query",
            titles: title,
            prop: "pageimages",
            format: "json",
            pithumbsize: "70"
        },
        function(data) {
            $.each(data.query.pages, function(i,item){
                return item.thumbnail.source;
            });
        });
    };


});

最佳答案

问题是您的模板没有您合理预期的范围。

解决方案是(取决于模板出现的位置)在函数前面链接一些 $parent. 调用。

参见 this git issuethis question了解更多详情。

关于javascript - 具有功能的 Angular UI Bootstrap Typeahead 模板 ng-src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24255251/

相关文章:

angularjs - ng-bind-html 不加载图像 src

angularjs - 使用 $dialog 多次打开同一个对话框

javascript - 简单的 Coderbyte 挑战计算 x 和 o 时遇到问题

javascript - 模块化网页设计

javascript - 如何在动态(AJAX)生成的元素上创建滚动事件?

javascript - 父子 Controller 的 Angular JS 错误

javascript - 如何使用带有文本而不是 null/数字的 VuetifyJS 时间选择器组件?

javascript - 变量是如何在 Angular 工厂中初始化的?

javascript - 具有相同 Controller 而不是新 Controller 的 Angular 引导 ui 模式

javascript - ui.bootstrap.typeahead : how to combine $http with debounce