首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在三元运算符上传递对象的承诺?

如何在三元运算符上传递对象的承诺?
EN

Stack Overflow用户
提问于 2016-01-19 01:56:44
回答 1查看 1K关注 0票数 1

因此,我正在实现角材料设计md-自动完成指令的AngularJS应用程序。我希望向控件发送一个承诺,这样如果查询没有完全加载,它就不会抛出一个错误;还希望将控件中的加载条看作是“加载”的信号。

当数据未完成加载时,会出现以下错误:

TypeError:无法读取未定义属性的“片”

我就是这样得到数据的:

代码语言:javascript
运行
复制
        $http({
            method: 'GET',
            url: $rootScope.apiURL+'getAllCustomers/'+session,
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        }).success(function(response){
            if(response.ErrorMessage === null && response.Result !== null){
                mixpanel.track("Customers loaded for POS");
                self.customers = Object.keys(response.Result).map(function (key) {return response.Result[key]});
            }
        })
        .error(function(data){
            alert('Something went wrong. Please try again.');
            mixpanel.track("Error loading customers");
        });

这是我的html:

代码语言:javascript
运行
复制
<md-autocomplete
        ng-disabled="ctrl.isDisabled"
        md-no-cache="ctrl.noCache"
        md-selected-item="ctrl.selectedItem"
        md-search-text-change="ctrl.searchTextChange(ctrl.searchText)"
        md-search-text="ctrl.searchText"
        md-selected-item-change="ctrl.selectedItemChange(item)"
        md-items="item in ctrl.querySearch(ctrl.searchText)"
        md-item-text="item.Name"
        md-min-length="0"
        placeholder="Buscar Cliente">
    <md-item-template>
        <span md-highlight-text="ctrl.searchText" md-highlight-flags="^i">{{item.Name}}</span>
    </md-item-template>
    <md-not-found>
        No states matching "{{ctrl.searchText}}" were found.
        <a ng-click="ctrl.newCustomer(ctrl.searchText)">Create a new one!</a>
    </md-not-found>
</md-autocomplete>

这些是处理查询的函数:

代码语言:javascript
运行
复制
function querySearch (query) {
    var results = query ? self.customers.filter( createFilterFor(query) ) : self.customers.slice(0, 50),
        deferred;
    return results;
}

function createFilterFor(query) {
    var lowercaseQuery = angular.lowercase(query);
    return function filterFn(customer) {
        return (customer.Name.toLowerCase().indexOf(lowercaseQuery) === 0);
    };
}

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-01-21 20:22:16

将所述代码包装到一个函数中:

代码语言:javascript
运行
复制
function foo()
  {
  return foo.self.customers.slice(0, 50);
  }

foo.self = self;

然后将语句更改为:

代码语言:javascript
运行
复制
var results = query ? self.customers.filter( createFilterFor(query) ) : foo

并以三元逻辑的形式在模板中运行类型检查:

代码语言:javascript
运行
复制
(typeof ctrl.querySearch(ctrl.searchText) === "function") ? item in ctrl.querySearch(ctrl.searchText)() : item in ctrl.querySearch(ctrl.searchText) 

参考资料

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34867299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档