[英]Passing Parameter to Angular Factory from controller
我無法將參數從角度控制器傳遞給工廠。 誰可以幫我這個事? 它可以在不傳遞參數的情況下工作,但是當我通過它時它不是。
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>
問題出在您的控制器中:
$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);
或者在服務中烘烤數字......
這里的問題是gridOptions:gridOptions
,拋出錯誤。 從factory
刪除,gridOptions:gridOptions
。
檢查代碼片段是否有工作代碼,並與您的代碼進行比較。
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>
你沒有定義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);
}
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.