2017-04-03 41 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

没有尝试的财产将控制器和工厂放在同一个模块上进行测试?因为我只是在同一个模块上同时使用控制器和工厂,它工作得很好。