2016-06-10 84 views
0

我有兩個功能,我想調用一個功能,其他只有第一個功能解決成功。如何解決功能和角度調用其他功能

$scope.createNewWorkModule = function (data, selectedUser) { 

     $scope.workOrderInfo = $localStorage.workOrderInfo; 

     $scope.createNewWorkOrder($scope.workOrderInfo).then(function (response) { 

      $scope.workOrderId = $localStorage.workOrderId; 

      var newWM = { 
       name: data.name, 
      }; 

      $scope.myPromise = operationsFactory.createWorkModule(angular.toJson(newWM)).success(function (response) { 

       $rootScope.workModules = response.result; 
       return $scope.workOrder; 

      }) 
     }); 
    }; 

    $scope.createNewWorkOrder = function (data) { 

     var newWD = { 
      name: data.name, 
      description: data.description, 
      user_id: $cookies.userId 
     }; 

     $scope.myPromise = operationsFactory.createWorkOrder(angular.toJson(newWD)).success(function (response) { 

      $localStorage.workOrderId = response.result.id; 

     }) 

     return $localStorage.workOrderId; 
    }; 

我想打電話給$scope.createNewWorkOrder.then,但它給錯誤

TypeError: Cannot read property 'then' of undefined at Scope.$scope.createNewWorkModule (work-order-create-controller.js:36) at $parseFunctionCall (angular.js:12158)

我該如何解決這個問題?

更新:

無法更新與檢索的數據視圖:

<div class="panel panel-default"> 
    <div class="panel-heading font-bold"> 
     <span>List of Work Modules</span> 
    </div> 
    <ul ng-repeat="wm in workModules" style="list-style: none"> 
     <li>{{wm.name}}</li> 
     <li>{{wm.description}}</li> 
    </ul> 
</div> 

回答

1
  1. 你的異步函數應該總是返回的承諾。
  2. 確保then成功函數始終返回鏈中下一個處理程序所需的值(並且不要使用已過時的.success方法,因爲該方法鏈接不正確,始終使用.then,但請注意稍有不同的參數是從$http得到的結果)。

除非你真的需要它們,否則可能會有很多函數可能只是函數,值可能是控制器中的局部變量。

請注意,一旦您使用.then,您可以在一個成功處理程序的末尾發出一個新的調用,並在同一級別處理另一個.then的結果,無需進一步進行嵌套。

$scope.createNewWorkModule = createNewWorkModule; // Do you need both this 
$scope.createNewWorkOrder = createNewWorkOrder; // and this? 

function createNewWorkModule(data, selectedUser) { 
    $scope.workOrderInfo = $localStorage.workOrderInfo; 

    return createNewWorkOrder($scope.workOrderInfo) 
    .then(function (workOrderId) { 
     $scope.workOrderId = workOrderId; 
     var newWM = { 
      name: data.name, 
     }; 

     return operationsFactory.createWorkModule(angular.toJson(newWM)); 
    }) 
    .then(function (response) { 
      // here we have response from the createWorkModule call 
      $rootScope.workModules = response.data.result; 
      return $scope.workOrder; 
    }); 
}; 

function createNewWorkOrder(data) { 
    var newWD = { 
     name: data.name, 
     description: data.description, 
     user_id: $cookies.userId 
    }; 

    return operationsFactory.createWorkOrder(angular.toJson(newWD)) 
    .then(function (response) { 
     var workOrderId = $localStorage.workOrderId = response.data.result.id; 
     return workOrderId; 
    }) 
}; 
+0

非常感謝鄧肯。一個問題是我無法更新視圖模型數據(workModules),即使它在根範圍內 – Satyadev

1

你得到錯誤then is not a function,因爲返回的值是undefined$localStorage.workOrderId解決異步。理想情況下,你應該返回一個承諾。

return operationsFactory.createWorkOrder(angular.toJson(newWD)).success(function (response) { 

     $localStorage.workOrderId = response.result.id; 
     return $localStorage.workOrderId; 

}); 
+0

更新了錯誤的問題。我猜你的答案仍然適用? – Satyadev

+0

一個問題是我無法更新視圖模型數據(workModules),即使它在根範圍內。更新了問題。請檢查一次 – Satyadev