Javascript 错误:$injector:unpr未知提供程序:未知提供程序:bProvider<;-B
我正在用AngularJS编写一个Web应用程序,后端使用Grails 在开发应用程序时,我可以使用Javascript 错误:$injector:unpr未知提供程序:未知提供程序:bProvider<;-B,javascript,angularjs,tomcat,grails,Javascript,Angularjs,Tomcat,Grails,我正在用AngularJS编写一个Web应用程序,后端使用Grails 在开发应用程序时,我可以使用grailsrunapp对其进行测试,但在将应用程序部署到WAR文件并将其放入Tomcat服务器时,它无法工作。以下是错误(打印到JS控制台):$injector/unpr?p0=b提供程序%20%3C-%20b 您可以在此处看到实时版本(在有限的时间内): 通常情况下,该错误不会打印出来,您将看到websocket消息正在发送(在页面上不做任何操作)。此外,红色的“释放车辆”按钮将不会显示,直到
grailsrunapp
对其进行测试,但在将应用程序部署到WAR文件并将其放入Tomcat服务器时,它无法工作。以下是错误(打印到JS控制台):$injector/unpr?p0=b提供程序%20%3C-%20b
您可以在此处看到实时版本(在有限的时间内):
通常情况下,该错误不会打印出来,您将看到websocket消息正在发送(在页面上不做任何操作)。此外,红色的“释放车辆”按钮将不会显示,直到采取行动请求该许可
忽略页面顶部的选项卡和内容,这是一些未删除的测试代码:)
以下源代码取自生成的网站,而非源代码:
HTML
德比现在
initNow(“/stomp”,“JKQXV”);
☰
-
-
-
-
一个标签
两个标签
$('#myTab a:first').tab('show');
//FIXME下面的代码不起作用,需要替换为绑定两个视图以切换窗格的功能
$('a[data toggle=“tab”]”)on('show.bs.tab',函数(e){
e、 target.tab('show');//新激活的选项卡
e、 relatedTarget.tab('hide');//上一个活动选项卡
});
德比ID:JKQXV
放行车辆
申请许可放行车辆
/资产/now-a8076e472f12cc0da0dae7cef46aa98d.js
// ----- cookies -----
// sets a cookie
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
// gets a cookie
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length,c.length);
}
}
return "";
}
// ----- utils -----
// makes a HTTP GET request async
function httpGetAsync(theUrl, callback) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
callback(xmlHttp.responseText);
}
}
xmlHttp.open("GET", theUrl, true); // true for asynchronous
xmlHttp.send(null);
}
function initNow(stomp, derbyId){
var app = angular.module('derby-now',[]);
// initialize websocket
var socket = new SockJS(stomp);
var client = Stomp.over(socket);
// get IDs
var clientId = getCookie('derby-now-' + derbyId);
app.run(function($rootScope) {
// sets the derby and client IDs in a cookie for one (1) day
function setIdCookie() {
setCookie('derby-now-' + derbyId, clientId, 1);
}
// handles websocket messages
function messageHandler(message) {
var event = eval('(' + message.body + ')');
var method = event.method;
switch(method) {
case 'granted':
var permission = event.permission;
switch(permission){
case 'releaseCars':
$rootScope.permissionReleaseCarsGranted();
break;
default:
console.log("unexpected permission grant: " + permission);
}
break;
case 'exception':
console.log('Server threw exception: ' + event.code);
break
default:
console.log("unexpected method: " + method);
}
}
// connects to the websocket so we can retrive messages
function connect() {
client.subscribe('/topic/now/' + derbyId + '/' + clientId, messageHandler);
}
client.connect({}, function() {
if(clientId == "") {
// ask the server for a client ID
httpGetAsync('/now/' + derbyId + '/init', function(response) {
clientId = response;
// set the cookie so we can get this later
setIdCookie();
// connect to the websocket
connect();
});
} else {
// renew cookie
setIdCookie();
// connect to the websocket
connect();
}
});
});
// standard call to server
function call(message) {
client.send('/app/now', {}, '{' +
'"derbyId":"' + derbyId + '",' +
'"clientId":"' + clientId + '",' +
message
+ '}');
}
app.controller('ReleaseCarsController', ['$scope', '$rootScope', function($scope, $rootScope) {
$scope.permissionReleaseCars = false;
$rootScope.permissionReleaseCarsGranted = function() {
$scope.$apply(function(){
$scope.permissionReleaseCars = true;
})
}
$scope.releaseCars = function() {
call('"method":"releaseCars"');
}
$scope.requestPermissionReleaseCars = function() {
call('"method":"requestPermission",' +
'"permission":"releaseCars"'
);
};
}]);
}
/----cookies-----
//设置一个cookie
函数setCookie(cname、cvalue、exdays){
var d=新日期();
d、 设置时间(d.getTime()+(exdays*24*60*60*1000));
var expires=“expires=“+d.toutString();
document.cookie=cname+“=”+cvalue+”;“+expires;
}
//得到一块饼干
函数getCookie(cname){
变量名称=cname+“=”;
var ca=document.cookie.split(“;”);
对于(var i=0;i您的代码在生产中已缩小,您需要将run
调用更改为:
app.run(['$rootScope', function($rootScope) {
不知道在发布消息之前是否做过谷歌搜索
app.run(['$rootScope', function($rootScope) {