2017-08-31 37 views
1

我创建了一个名为paging的工厂,该工厂将返回分页编号。无法在控制器上调用工厂

expenseApp.factory('paging', function() { 
    this.pages = function(min, max, step) { 
    if (max <= 5) { 
     min = 1; 
    } 
    if (max > 5) { 
     min = max - 3; 
    } 
    step = step || 1; 
    var input = []; 
    for (var i = min; i <= max; i += step) 
     input.push(i); 
    return input; 
    }; 

我想打电话给这家工厂在我的控制器

expenseApp.controller('expenseController', function($scope, $http, paging) { 
    $scope.range = function() { 
     $scope.answer = paging.range(0, 10, 1); 
    } 
    }); 

但是这个代码不工作。 我试了一下here

var expenseApp = angular.module('expenseApp', []); 
 
expenseApp.factory('paging', function() { 
 
    this.pages = function(min, max, step) { 
 
    if (max <= 5) { 
 
     min = 1; 
 
    } 
 
    if (max > 5) { 
 
     min = max - 3; 
 
    } 
 
    step = step || 1; 
 
    var input = []; 
 
    for (var i = min; i <= max; i += step) 
 
     input.push(i); 
 
    return input; 
 
    }; 
 
    expenseApp.controller('expenseController', function($scope, $http, paging) { 
 
    $scope.pages = function() { 
 
     $scope.answer = paging.range(0, 10,1); 
 
    } 
 
    }); 
 
});
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.5/angular.min.js"></script> 
 
    <link rel="stylesheet" href="style.css"> 
 
    <script src="MyApp.js"></script> 
 
    <script src="MyCtrl.js"></script> 
 

 
</head> 
 

 
<body> 
 
    <div ng-app="expenseApp" ng-controller="expenseController"> 
 
    <h1>Hello Plunker!</h1> 
 
    <ul class="pagination"> 
 
     <li ng-repeat="a in pages"> 
 
     <a ng-click="pagination(a)">{{a}}</a> 
 
     </li> 
 
    </ul> 
 
    </div> 
 
</body> 
 

 
</html>

+0

paging.range ??? – anu

+1

请勿使用角度的缩小版,以便获得可读的错误消息。一旦您在控制台中阅读了错误消息,请重新说明MYApp.js和MyApp.js是不同的文件名。然后继续阅读下一条错误消息,并意识到您已从工厂定义中定义了您的控制器。总之,调试并修复你的代码。 –

+0

@slacker plese查看已更新的代码 – xrcwrn

回答

1

var expenseApp = angular.module('expenseApp', []); 
 
expenseApp.factory('paging', function() { 
 
    return { 
 
    pages: function(min, max, step) { 
 
     if (max <= 5) { 
 
     min = 1; 
 
     } 
 
     if (max > 5) { 
 
     min = max - 3; 
 
     } 
 
     step = step || 1; 
 
     var input = []; 
 
     for (var i = min; i <= max; i += step) 
 
     input.push(i); 
 
     return input; 
 
    } 
 
    } 
 
}); 
 

 
expenseApp.controller('expenseController', ['$scope', '$http', 'paging', function($scope, $http, paging) { 
 
    $scope.pages = function() { 
 
    $scope.answer = paging.pages(0, 10, 1); 
 
    } 
 
    $scope.pages(); 
 
}]);
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.5/angular.min.js"></script> 
 
</head> 
 

 
<body> 
 
    <div ng-app="expenseApp" ng-controller="expenseController"> 
 
    <h1>Hello Plunker!</h1> 
 
    <ul class="pagination"> 
 
     <li ng-repeat="a in answer"> 
 
     <a ng-click="pagination(a)">{{a}}</a> 
 
     </li> 
 
    </ul> 
 
    </div> 
 
</body> 
 

 
</html>

请检查该片段。

变化我提出:

的index.html

<script src="MYApp.js"></script> 

<ul class="pagination"> 
     <li ng-repeat="a in answer"> 
     <a ng-click="pagination(a)">{{a}}</a> 
     </li> 
</ul> 

MyCtrl.js

expenseApp.factory('paging', function() { 
    return { 
    pages: function(min, max, step) { 
     if (max <= 5) { 
     min = 1; 
    } 
    if (max > 5) { 
     min = max - 3; 
    } 
    step = step || 1; 
    var input = []; 
    for (var i = min; i <= max; i += step) 
     input.push(i); 
    return input; 
    } 
    } 
}); 

expenseApp.controller('expenseController', ['$scope','$http', 'paging', function($scope, $http, paging) { 
    $scope.pages = function() { 
    console.log(paging) 
    $scope.answer = paging.pages(0, 10,1); 
    } 
    $scope.pages(); 
}]); 
0

这是因为你得到错误

Error: [$injector:undef] http://errors.angularjs.org/1.6.5/$injector/undef?p0=paging(…)

这意味着你的工厂没有返回任何值。因此,要解决这个你可以在你的工厂使用此代码

expenseApp.factory('paging', function() { 
    var paging = {}; 
    var range = function(min, max, step) { 
    if (max <= 5) { 
     min = 1; 
    } 
    if (max > 5) { 
     min = max - 3; 
    } 
    step = step || 1; 
    var input = []; 
    for (var i = min; i <= max; i += step) 
     input.push(i); 
    return input; 
    }; 
    paging.range = range; 
    return paging; 
}); 

注意var paging = {};是一个JSON对象,将持有这家工厂一样range提供的所有功能,因此paging.range = range;将一个工厂方法range添加到range键的paging对象。最后,这个对象从服务中返回。

现在,无论何时使用工厂paging,它都类似于使用JSON对象paging。因此,访问paging.range(0, 10,1)现在将调用工厂方法。

你plunkr也没有那么在这里工作是链接到工作PLUNKR

+0

代码没有返回任何值,它应该按照重复中的指定打印10次 – xrcwrn