簡體   English   中英

AngularJS函數調用順序

[英]Angularjs function calls order

我有一個選項下拉列表,根據條件顯示或不顯示。

   <div class="col-sm-9">
      <select class="form-control" ng-model="vm.templateType" ng-disabled="vm.status == 'sold' || vm.status == 'return' "ng-options="type.id as type.name for type in vm.templateTypes | filter:vm.isShowableTemplate"></select>
 </div>

這是我的控制器:

function FormOrderDialogController(tsModulesService, $scope, $q, $http, $uibModalInstance, params, $filter, Requester)                              

    Requester.restGet("/events/" + params.eventId, null, params.serverId).then((data)=>{
        vm.event = data;
    });

    Requester.restGet('/dic/10', null, null, null, true).then((resp) => {
        vm.templateTypes = resp;
        vm.templateType = vm.templateTypes[0].id;
    });    

     vm.isShowableTemplate = isShowableTemplate;

     function isShowableTemplate(templateType) {

        switch (templateType.id) {
            case 321:
                return !!vm.event.info.ticketTemplate;
            case 322:
                return !!vm.event.info.ticketETemplate;
        }
    }                                                                           

到調用isShowableTemplate的時候,我希望事件對象被填充,而且事情是getEvent函數被調用了兩次,一次是在isShowableTemplate被調用之前,一次是在調用之后。 問題是第一次調用后事件未定義,並且出現錯誤“無法讀取未定義的屬性'info'”。 我的問題是為什么會這樣,我在做什么錯。 我是js和angular的新手,所以可能我錯過了一些重要的東西。

為什么不刪除函數和過濾器:

function FormOrderDialogController(tsModulesService, $scope, $q, $http, $uibModalInstance, params, $filter, Requester)                              

    Requester.restGet("/events/" + params.eventId, null, params.serverId)
        .then(data => {
            vm.event = data;

            return Requester.restGet('/dic/10', null, null, null, true);
        })
        .then(resp => {
            vm.templateTypes = resp;
            vm.showableTemplateTypes = resp.filter(t => { 
                switch (t.id) {
                    case 321:
                        return !!vm.event.info.ticketTemplate;
                    case 322:
                        return !!vm.event.info.ticketTemplate;
                }

                return false; // or true depending if you want to show the     others.
            });

            vm.templateType = vm.templateTypes[0].id;
        });   
}  

我將兩個Promise結合在一起,因為您在第二個響應中使用了vm.event 通過這種方式,您可以始終保證vm.event某些值。

的HTML:

<div class="col-sm-9">
    <select class="form-control" ng-model="vm.templateType" ng-disabled="vm.status == 'sold' || vm.status == 'return' "ng-options="type.id as type.name for type in vm.showableTemplateTypes"></select>
</div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM