簡體   English   中英

AngularJS向我的控制器注入新服務

[英]AngularJS issues with injecting a new service into my controller

我有一個新的userContext.js文件,它試圖創建一個新的服務權限“userService”。 該服務反過來將與服務器通信並返回一些環境設置以及用戶會話ID。

當我從我的dashboard.js調用它進入我的datacontext.js控制器時,這一切都正常工作; 但是我想為此實際創建一個服務。 然后,我將在每個用戶會話的整個生命周期中持久保存這些會話變量。

在我最初嘗試創建服務時,我遇到了很多注入器錯誤,例如:

       Error: [ng:areq] Argument 'fn' is not a function, got string

我把它包含在我的index.html中:

  <script src="app/services/userContext.js"></script>

這是一個儀表板控制器代碼段,我嘗試注入'userService'

 (function () {
'use strict';
var controllerId = 'dashboard';
angular.module('app').controller(controllerId, ['$scope', '$routeParams', '$location', 'common', 'datacontext', 'userService', dashboard]);

function dashboard($scope, $routeParams, $location, common, datacontext, userService) {
    var getLogFn = common.logger.getLogFn;
    var log = getLogFn(controllerId);

    var vm = this;

    getRzInitParams();

    function getRzInitParams() {
        log('Initializing Server Connection...');
        var rzParams = "";
        datacontext.getRzInitParams().then(function (data) {
            rzParams = data;
            initRz(data);
        });
    }
    function initRz(data) {         
        var response;
        datacontext.initRz().then(function (data) {
            response = data[0].split(":")                
            if (response[1].match(/SUCCESS/g)) {
                log('Server init returned ' + response[1].match(/SUCCESS/g));
                openUserSession();
            }
            else {
                log('Server init failed !');
            }

        });            
    }
 }
})();

這是來自datacontext.js的片段:

(function () {
'use strict';

var serviceId = 'datacontext';
angular.module('app').factory(serviceId, ['$http', 'common', datacontext]);

function datacontext($http, common) {
    var $q = common.$q;

    var service = {
        initRz: initRz,
        openUserSession: openUserSession,
        getRzInitParams: getRzInitParams
    };

    return service;

function initRz() {
        domain = "localhost:"
        port = "49479";
        controllerpath = "/api/init";
        space = "rz64698";
        env = "rz64698";
        cl_config = "C:\\Rz\\rz64698\\master\\bin\\cl_config.xml";

        var url = "http://" + domain + port + controllerpath + "?space=" + space + "&environment=" + env + "&clConfig=" + cl_config;
        var deferred = $q.defer();
        deferred.notify("Getting init parameters...");
        var retval = [];            
        $http({
            method: 'GET',
            encoding: 'JSON',
            headers: {
                'Access-Control-Allow-Origin': 'true'
            },                
            withCredentials: true,
            url: url
        }).success(function (data, status, headers, config) {
            retval = data;
            deferred.resolve(retval);
        });
        return deferred.promise;
    }
    function getRzInitParams() {
        var deferred = $q.defer();
        var retval = [];
        $http({
            method: 'GET',
            encoding: 'JSON',
            url: 'breeze/breeze/GetRzEnv'
        }).success(function (data, status, headers, config) {
            retval = data;
            deferred.resolve(retval);
        });            
        return deferred.promise;
    }
  }
  })();

最后我正在創建新的'userService'服務:

     (function () {
'use strict';

var app = angular.module('app');

app.service('userService', '$http', function () {
    // define private vars
    var _rzEnvParams = [];
    var _sessionID = '';

    this.initrz = function(domain, port, controllerpath, space, env, clariteconfig) {
        domain = "localhost:"
        port = "49479";
        controllerpath = "/api/init";
        space = "rz64698";
        env = "rz64698";
        cl_config = "C:\\rz\\rz64698\\master\\bin\\clarite_config.xml";

        var url = "http://" + domain + port + controllerpath + "?space=" + space + "&environment=" + env + "&clariteConfig=" + cl_config;
        var deferred = $q.defer();
        deferred.notify("Getting Rage init parameters...");
        var retval = [];

        $http({
            method: 'GET',
            encoding: 'JSON',
            headers: {
                'Access-Control-Allow-Origin': 'true'
            },
            withCredentials: true,
            url: url
        }).success(function (data, status, headers, config) {
            retval = data;
            deferred.resolve(retval);
        });
        return deferred.promise;
    }
    this.getrzInitParams = function () {
        var deferred = $q.defer();
        deferred.notify("Getting Rage init parameters...");
        var retval = [];
        $http({
            method: 'GET',
            encoding: 'JSON',
            url: 'breeze/Rage/GetrzEnv'
        }).success(function (data, status, headers, config) {
            retval = data;
            deferred.resolve(retval);
        });
        return deferred.promise;
    }
    this.openUserSession = function() {
        domain = "localhost:"
        port = "49479";
        controllerpath = "/api/open";
        user = "";
        pass = "";
        var url = "http://" + domain + port + controllerpath + "?userid=" + user + "&pass=" + pass;
        var deferred = $q.defer();
        deferred.notify("Opening user session...");
        var retval = [];
        $http({
            method: 'GET',
            encoding: 'JSON',
            headers: {
                'Access-Control-Allow-Origin': 'true'
            },
            withCredentials: true,
            url: url
        }).success(function (data, status, headers, config) {
            retval = data;
            deferred.resolve(retval);
        });
        return deferred.promise;
    }
    this.closeUserSession = function(domain, port, controllerpath) {

    }
});
 })();

如果要注入某些服務,則應使用以下語法之一

如果你只需要角度服務

app.service('userService', function ($http) {
 ...

如果你需要定制服務

app.service('myService', ['$http', 'myOtherService', function($http, myOtherService) { 
... 
}])

app.service('userService', '$http', function () {

應該是這樣的

app.service('userService', function ($http) {

希望這會奏效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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