Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每个路由上的Init AngularJS rootScope变量_Javascript_Angularjs - Fatal编程技术网

Javascript 每个路由上的Init AngularJS rootScope变量

Javascript 每个路由上的Init AngularJS rootScope变量,javascript,angularjs,Javascript,Angularjs,我正在使用AngularJS 1.6.4和AngularRoute。我想设置一些全局变量,比如SERVER_PATH,它表示到后端web服务的路径 我可以通过在主路由的控制器中设置$rootScope变量来实现这一点,但是如果直接访问任何路由,我希望加载它 以下是我的意思的一个例子: var myApp = angular.module('myApp', ["ngRoute"]) .config(function ($routeProvider, $locationProvider){

我正在使用AngularJS 1.6.4和AngularRoute。我想设置一些全局变量,比如SERVER_PATH,它表示到后端web服务的路径

我可以通过在主路由的控制器中设置$rootScope变量来实现这一点,但是如果直接访问任何路由,我希望加载它

以下是我的意思的一个例子:

var myApp = angular.module('myApp', ["ngRoute"])
.config(function ($routeProvider, $locationProvider){
    $locationProvider.html5Mode(false);
    $routeProvider.
    when("/service-provider", {
        templateUrl: 'service-provider.html'                                
                        }).
    when("/confirm", {
        templateUrl: 'confirm.html',
        controller: 'confirmController'    
    }).
    when("/login", {
        templateUrl: 'login/login.html'
        controller: 'loginController'
    }).
    when("/sign", {
        resolve: {
            "check": function($location, $rootScope) {
                if ( !$rootScope.token ) {
                    $location.path('/login');
                }
            }
        },
        templateUrl: 'sign/sign-sp.html',
        controller: 'signDataApiCtrl'  
    }).
    when("/verify", {
        templateUrl: 'verify/verify.html'
    }).
    otherwise({
        redirectTo: '/login'
    });
});
所以,/login是我的主页。我可以像这样在登录控制器中设置$rootScope变量

myApp.controller('loginController', function($rootScope) {
     $rootScope.SERVER_PATH = "http://localhost:8080/myApp/webresources";
}
但是,如果用户直接访问,“/serviceprovider”页面会怎么样呢。然后,我还需要将这个变量添加到该控制器中


实现这一点最简单的方法是什么?

将东西注入
$rootScope
是一种糟糕的做法。 在这些情况下,我建议对服务器路径使用常量:

myApp.constant('SERVER_PATH', "http://localhost:8080/myApp/webresources");
然后在需要注入该常数的地方:

myApp.controller('loginController', function(SERVER_PATH) {
    console.log(SERVER_PATH);
}
此外,我认为对于服务器端的工作,比如执行HTTP请求,您需要这样做。因此,在这种情况下,避免将此变量注入控制器。 注入负责请求的服务,并在这些服务内部确保它们注入服务器路径,可能会为请求创建一个主入口点,并仅在那里注入该常量

您还可以考虑使用
拦截器
,并在那里设置拦截器:

// register the interceptor as a service
$provide.factory('myHttpInterceptor', function(SERVER_PATH) {
  return {
    'request': function(config) {
      // change the config using the SERVER_PATH as base URL
      return config;
    }
  };
});

$httpProvider.interceptors.push('myHttpInterceptor');

将东西注入
$rootScope
是一种糟糕的做法。 在这些情况下,我建议对服务器路径使用常量:

myApp.constant('SERVER_PATH', "http://localhost:8080/myApp/webresources");
然后在需要注入该常数的地方:

myApp.controller('loginController', function(SERVER_PATH) {
    console.log(SERVER_PATH);
}
此外,我认为对于服务器端的工作,比如执行HTTP请求,您需要这样做。因此,在这种情况下,避免将此变量注入控制器。 注入负责请求的服务,并在这些服务内部确保它们注入服务器路径,可能会为请求创建一个主入口点,并仅在那里注入该常量

您还可以考虑使用
拦截器
,并在那里设置拦截器:

// register the interceptor as a service
$provide.factory('myHttpInterceptor', function(SERVER_PATH) {
  return {
    'request': function(config) {
      // change the config using the SERVER_PATH as base URL
      return config;
    }
  };
});

$httpProvider.interceptors.push('myHttpInterceptor');

我相信最好的方法是使用
angular.module(…).constant('key',value)

然后将它们注射到你想要的地方:

MainController = app.controller(STATIC_EVENTS, $scope, $http) {
...
}

我相信最好的方法是使用
angular.module(…).constant('key',value)

然后将它们注射到你想要的地方:

MainController = app.controller(STATIC_EVENTS, $scope, $http) {
...
}

尝试使用
angularModule。运行

myApp.run(function($rootScope) {
  $rootScope.SERVER_PATH = "http://localhost:8080/myApp/webresources";
})

尝试使用
angularModule。运行

myApp.run(function($rootScope) {
  $rootScope.SERVER_PATH = "http://localhost:8080/myApp/webresources";
})

@FrankerZ的可能重复我不认为它是重复的,因为我问的是常量变量,这些变量需要在Begging初始化,并且永远不会改变。在链接的帖子中,OP询问的是在应用程序生命周期中动态变化的全局变量……这里的答案似乎显示了常量的使用:@FrankerZ的可能重复项我认为它不符合重复项的条件,因为我问的是需要在Begging初始化且永不更改的常量变量。在链接帖子中,OP询问了在应用程序生命周期中动态变化的全局变量……这里的答案似乎显示了常量的使用: