Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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 如何对模块进行参数化,使其能够根据需要配置需要的应用程序?_Javascript_Angularjs_Dependency Injection_Module - Fatal编程技术网

Javascript 如何对模块进行参数化,使其能够根据需要配置需要的应用程序?

Javascript 如何对模块进行参数化,使其能够根据需要配置需要的应用程序?,javascript,angularjs,dependency-injection,module,Javascript,Angularjs,Dependency Injection,Module,在a模式中,我想将AngularJS应用程序的配置和实用程序分解为一个独立的模块,例如: angular.module("configurer", []) .config(["$httpProvider", function($httpProvider) { $httpProvider.defaults.headers.common["Accept"] = "application/hal+json"; }]); 然后,在我的应用程序中: angular.module("app", [

在a模式中,我想将AngularJS应用程序的配置和实用程序分解为一个独立的模块,例如:

angular.module("configurer", [])
.config(["$httpProvider", function($httpProvider) {

  $httpProvider.defaults.headers.common["Accept"] = "application/hal+json";

}]);
然后,在我的应用程序中:

angular.module("app", ["configurer"]);
angular.module("app", ["configurer"])
.constant("Application", {
  CSRF: {
    headerName: "X-CSRF-TOKEN",
    cookieName: "APP-CSRF-TOKEN"
  }
});

我想添加一个可选的CSRF保护:

angular.module("configurer", [])
.config(["$httpProvider", function($httpProvider) {

  $httpProvider.defaults.headers.common["Accept"] = "application/hal+json";

  if (applicationWantsCsrfProtection) {
    // implement CSRF protection
  }

}]);
问题是,如何设置此
应用程序WANTCSRFProtection
变量


我试图通过常数:

angular.module("configurer", [])
.config(["$injector", "$httpProvider", function($injector, $httpProvider) {

  $httpProvider.defaults.headers.common["Accept"] = "application/hal+json";

  if ($injector.has("Application")) {
    var Application = $injector.get("Application");
    if (Application.hasOwnProperty("CSRF")) {
      // implement CSRF protection with Application.CSRF.* attributes
    }
  }

}]);
然后,在我的应用程序中:

angular.module("app", ["configurer"]);
angular.module("app", ["configurer"])
.constant("Application", {
  CSRF: {
    headerName: "X-CSRF-TOKEN",
    cookieName: "APP-CSRF-TOKEN"
  }
});
但是
$injector.has(“应用程序”)
始终返回
false
,无论应用程序中是否定义了
应用程序
常量:


我通过提供商找到了解决方案:

(函数(角度){
变量配置=函数($injector){
console.log(“configurer config has Application:+$injector.has(“Application”);//true
};
var run=功能($注入器){
console.log(“configurer run has Application:+$injector.has(“Application”);//true
};
角度模块(“配置器”,[])
.provider(“init”,函数(){
返回{
config:config,
$get:function(){
返回{
跑:跑
}
}
}
});
})(角度);
然后,在应用程序中:

angular.module(“应用程序”、[“配置程序”])
.constant(“应用程序”{
CSRF:{
头名:“X-CSRF-TOKEN”,
cookieName:“APP-CSRF-TOKEN”
}
})
.config(函数(initProvider$injector){
initProvider.config($injector);
})
.run(函数(初始化,$injector){
初始运行($injector);
});


此解决方案的一个优点是,configurer子模块可以在不修改应用程序的情况下扩展configurer行为:

angular.module("app", ["configurer"]);
angular.module("app", ["configurer"])
.constant("Application", {
  CSRF: {
    headerName: "X-CSRF-TOKEN",
    cookieName: "APP-CSRF-TOKEN"
  }
});
(函数(角度){
变量配置=函数($injector){
console.log(“subConfigurer config has Application:+$injector.has(“Application”);//true
};
var run=功能($注入器){
console.log(“subconfigurator run has Application:+$injector.has(“Application”);//true
};
角度模块(“子配置程序”、[“配置程序”])
.config(函数(initProvider){
var configCallfront=initProvider.config;
initProvider.config=函数($injector){
配置调用前端($injector);
配置(喷油器);
};
var runCallfront=initProvider.$get().run;
initProvider.$get=function(){
返回{
运行:函数($injector){
runCallfront($injector);
运行($注射器);
}
}
};
});
})(角度);



尽管如此,我们仍然可以接受批评或更好的解决方案

我通过提供商找到了解决方案:

(函数(角度){
变量配置=函数($injector){
console.log(“configurer config has Application:+$injector.has(“Application”);//true
};
var run=功能($注入器){
console.log(“configurer run has Application:+$injector.has(“Application”);//true
};
角度模块(“配置器”,[])
.provider(“init”,函数(){
返回{
config:config,
$get:function(){
返回{
跑:跑
}
}
}
});
})(角度);
然后,在应用程序中:

angular.module(“应用程序”、[“配置程序”])
.constant(“应用程序”{
CSRF:{
头名:“X-CSRF-TOKEN”,
cookieName:“APP-CSRF-TOKEN”
}
})
.config(函数(initProvider$injector){
initProvider.config($injector);
})
.run(函数(初始化,$injector){
初始运行($injector);
});


此解决方案的一个优点是,configurer子模块可以在不修改应用程序的情况下扩展configurer行为:

angular.module("app", ["configurer"]);
angular.module("app", ["configurer"])
.constant("Application", {
  CSRF: {
    headerName: "X-CSRF-TOKEN",
    cookieName: "APP-CSRF-TOKEN"
  }
});
(函数(角度){
变量配置=函数($injector){
console.log(“subConfigurer config has Application:+$injector.has(“Application”);//true
};
var run=功能($注入器){
console.log(“subconfigurator run has Application:+$injector.has(“Application”);//true
};
角度模块(“子配置程序”、[“配置程序”])
.config(函数(initProvider){
var configCallfront=initProvider.config;
initProvider.config=函数($injector){
配置调用前端($injector);
配置(喷油器);
};
var runCallfront=initProvider.$get().run;
initProvider.$get=function(){
返回{
运行:函数($injector){
runCallfront($injector);
运行($注射器);
}
}
};
});
})(角度);


尽管如此,我们仍然可以接受批评或更好的解决方案