- Error: [$injector:modulerr]
- Error: [$injector:unpr] 控制器注入失败
$injector:nomod 错误
通常出现这个错误是因为angular.module定义时写法错误;
检查是否有[],或者是否多次定义同一个module;
标准定义 angular.module(‘1yd.config’,[])
加上[]表示定义,没有[]表示引用;Error: [$injector:undef] factory的service必须返回一个对象
-
http().successisnotafunc…查看了相关文档,原来在angular1.x的高版本中, http promise的方法的success和error方法已经被弃用了,转为标准的then方法。
angularjs1.x api - v8要开始移除对arguments的支持了,最好开始使用es6中的参数省略和默认的形式
function (type="text",...items)
- $http的标准定义形式:
angular.module('cmsService').factory('commonService',['$http',($http)=>{ let service = {} let userModel = { login_info :{},logPath: '',client_version: '1.0.0',get_log_path: ()=>logPath,set_user_info:(arg)=>{login_info = JSON.parse(arg)},get_user_info:()=>login_info,get_client_version:()=>client_version,setAutoMove:(state)=>{aotuMove = state},getAutoMove:()=>autoMove,resetLoginInfo:()=>{login_info = {}} } service.cms = userModel; service.log = (...items)=>{ let date = new Date(); let output = "["+date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()+"]" for(let i = 0,len = items.length; i < len; i++){//标记2 if(typeof items[i] == "object"){ output += JSON.stringify(items[i]) }else{ output +=String(items[i]); } // output+="\r\n"; } console.log(`output${output}`); service.cmsFilelog(output) } service.cmsFilelog=(output)=>{ $http({ url:'/common/log',//标记1 method:'POST',data:{output:output} }).then((res)=>{ console.log(); },(res)=>{ console.log(); }) } return service; }])
在标记1处url可以自己设计。’/common/log’的实现是这样的:
var common = require('../routes/common')
app.use('/common',common);
其中common.js文件:
router.post('/log',function(req,res){})
这两个地方组合成了$http中的/common/log;
另外,如果这里的url是跨域的,比如:
service.cmsFilelog=(output)=>{
$http({
url:'https://angularjs.org/doesntexist&callback=JSON_CALLBACK',method:'JSONP',data:{output:output}
}).then((res)=>{ console.log(); },(res)=>{ console.log(); }) }
注意method是JSONP.
to be continue…