我无法将参数从角度控制器传递到工厂。谁可以帮我这个事?它可以在不传递参数的情况下工作,但是当我通过它时它不是。
var app = angular.module('employee', ['ui.grid', 'ui.grid.saveState', 'ui.grid.selection', 'ui.grid.cellNav', 'ui.grid.resizeColumns', 'ui.grid.moveColumns', 'ui.grid.pinning', 'ui.bootstrap', 'ui.grid.autoResize','ui.grid.pagination']);
app.controller('EmpCtrl', ['$scope', '$http', '$interval', '$modal', '$log', 'gridService', function ($scope, $http, $interval, $modal, $log, gridService) {
$scope.LoadNextPage = gridService.LoadNextPage("5");
}]);
var gridService = function ($http, $rootScope) {
return {
LoadNextPage: function (hh) {
alert(hh);
},
gridOptions:gridOptions
};
};
app.factory('gridService', ['$http', '$rootScope', gridService]);
这就是我在视图中使用它的方式
<span id="pcNext"
class="glyphicon glyphicon-step-forward"
ng-click="LoadNextPage()">
</span>
答案 0 :(得分:3)
问题出在您的控制器中:
$scope.LoadNextPage = gridService.LoadNextPage("5");
这意味着您的LoadNextPage
不是功能,而是您服务中的某项功能调用的结果。哪个btw没有返回任何东西,而只是显示警报。但在您看来,您正在使用LoadNextPage
作为函数调用...
将其更改为此,以便您的控制器LoadNextPage
成为您可以从视图中调用的功能。
$scope.LoadNextPage = gridService.LoadNextPage;
并在您看来:
<span id="pcNext"
class="glyphicon glyphicon-step-forward"
ng-click="LoadNextPage(5)">
</span>
这应该有用。
注意 :我怀疑您的
gridOptions
是在您在问题中提供的代码范围之外的某处定义的,因此它不会由于丢失(可能)对象而引发错误。所以我认为这是代码中的拼写错误而不是实际问题。
没问题。您可以创建包装函数或将其绑定到代码中的特定参数:
// wrap
$scope.LoadNextPage = function() {
return gridService.LoadNextPage("5");
};
// bind
$scope.LoadNextPage = gridService.LoadNextPage.bind(this, 5);
或烘焙您服务中的号码......
答案 1 :(得分:0)
此处的问题是gridOptions:gridOptions
未定义哪个引发错误。
从,gridOptions:gridOptions
移除factory
。
检查代码段是否有工作代码,并与您的代码进行比较。
var app = angular.module('employee', []);
app.controller('EmpCtrl', ['$scope', 'gridService', function ($scope, gridService) {
$scope.clickMe = function() {
$scope.LoadNextPage = gridService.LoadNextPage("5");
}
}]);
var gridService = function() {
return {
LoadNextPage: function (hh) {
alert(hh);
}
};
};
app.factory('gridService', ['$http', '$rootScope', gridService]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="employee" ng-controller="EmpCtrl">
<button ng-click="clickMe()">Button</button>
</div>
答案 2 :(得分:0)
您未定义 gridOptions 功能,请参阅此链接:
angular.module("myApp", []).controller("myCon", function($scope, $interval, gridService){
$scope.LoadNextPage = gridService.LoadNextPage("5");
}).factory('gridService', ['$http', '$rootScope', gridService]);
function gridService($http, $rootScope){
return {
LoadNextPage: function (hh) {
alert(hh);
}
};
}