簡體   English   中英

從控制器將參數傳遞給Angular Factory

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM