2017-04-03 45 views
0

我有兩個模塊模塊-1模塊-2在我的角應用程序。角度工廠功能只執行一次

模塊-1,我已經創建了一個工廠

angular.module('ui.campaign.manager').factory('validate',['the',function(the) { 
return { 
    validateOwner: function(scope) { 
     console.log(scope.campaign); 
     if(!scope.campaign.owner) { 
      scope.view = true; 
      scope.errormsg = "Error : Campaign owner is a mandatory field. Please select one from the dropdown menu."; 
      return false; 
     } 
     return true; 
    } 
}; 

}]);

在模塊-2,還有就是我呼籲這個功能的控制器NG單擊

var campaignApp = angular.module('module-2',[ 'module-1']); 

campaignApp.controller('campaignDetailController', function($scope, validate) { 

    scope.submitCampaignPage = function(){ 
     validate.validateOwner($scope); 
    } 
}); 
<input class="btn btn-primary" type="submit" value="Next" name="campdetailsnext" ng-click="submitCampaignPage()"> 

現在,問題是,當我點擊下一步按鈕validateOwner功能第一次在後續的點擊中調用正確,submitCampaignPage函數被調用,但validateOwner函數根本沒有被調用。

角度緩存結果?

+0

控制檯日誌中的任何錯誤?請添加完整模塊配置,其中定義了'scope.submitCampaingPage'。 – lin

+0

不,控制檯日誌中沒有錯誤 – user3587856

+0

請添加請求的代碼。 'console.log(scope.campaign);'工作 - >寫輸出嗎? – lin

回答

0

您需要將功能參數傳遞爲$scope而不是scope

此外,確保申報scope.campaign爲對象控制器或工廠,否則存在發生異常試圖訪問未定義

演示

angular.module("app",[]) 
 
.controller("ctrl",function($scope,validate){ 
 
$scope.campaign = {} 
 
    $scope.submitCampaignPage = function(){ 
 
    console.log(validate.validateOwner($scope)) 
 
} 
 

 
}).factory('validate',function() { 
 
    return { 
 
     validateOwner: function(scope) { 
 
      if(!scope.campaign.owner) { 
 
      scope.view = true; 
 
      scope.errormsg = "Error : Campaign owner is a mandatory field. Please select one from the dropdown menu."; 
 
      return false; 
 
      } 
 
      return true; 
 
     } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="ctrl"> 
 
<input class="btn btn-primary" type="submit" value="Next" name="campdetailsnext" ng-click="submitCampaignPage()"> 
 

 
</div>

+0

嗨,這只是$ scope,而$ scope.campaign也是在controller中定義的,而且當我第一次調用validateOwner函數時,它正確地打印了scope.campaign值。 – user3587856

0

沒有嘗試的財產將控制器和工廠放在同一個模塊上進行測試?因爲我只是在同一個模塊上同時使用控制器和工廠,它工作得很好。