typeahead无法从api angularjs获取数据

时间:2016-10-14 14:39:15

标签: javascript angularjs

这是我的HTML代码

<input type="text" ng-model="ngModelOptionsSelected" 
 placeholder="Enter Story Title"
 ng-model-options="modelOptions" 
 ng-change="onChangeFunction()"
 typeahead-on-select="typeaheadOnSelectFunction()"
 uib-typeahead="document as document.Name for document in getStory($viewValue)" 
 class="form-control">

这是我的.js代码

$scope.getStory = function (val) {
storyService.GetStoryByName(cacheService.project.projectId,val).success(function (data) {
                if (data.ResponseStatus) {
               debugger;
                    return  data.ResponseData;
                } else {
                    //On failure
                    toastr.error(data.ErrorData.Error);
                }
            });
        };

返回数据的函数输出 ResponseData =

[{"Id":211380.0,"Name":"dixit"},{"Id":211488.0,"Name":"dixit ade"},{"Id":251541.0,"Name":"dixit"},{"Id":842671.0,"Name":"dixit"},{"Id":842672.0,"Name":"dixit choksi"}]

但我无法在typeahead中绑定数据。

请帮助我,我被卡住了。 感谢

1 个答案:

答案 0 :(得分:1)

您的函数$scope.getStory()实际上没有返回任何内容,您的返回行return data.ResponseData;嵌套在另一个函数中。

uib-typeahead指令可以使用promises,因此您只需要从函数中返回promise。

$scope.getStory = function (val)
{
    return storyService.GetStoryByName(cacheService.project.projectId, val).success(function (data)
    {
        if (data.ResponseStatus)
            return data.ResponseData;

        toastr.error(data.ErrorData.Error);

        return [];
    });
};

您还可以向指令typeahead-loading="isLoading"添加另一个属性,该指令将在promise解析时进行切换。例如,它可用于显示/隐藏加载微调器!