当我尝试导航到我的angularjs应用时,收到以下错误消息:
Error: [$injector:unpr] http://errors.angularjs.org/1.2.22/$injector/unpr?p0=linkProvider%20%3C-%20link w/<@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:6:443 gc/l.$injector<@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:36:139 c@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:34:204 gc/p.$injector<@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:36:209 c@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:34:204 d@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:34:418 f/<.instantiate@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:35:101 Pd/this.$get</<@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:67:249 v/<@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:53:373 r@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:7:369 v@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:53:237 g@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:47:117 g@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:47:117 u/<@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:46:255 fc/c/</<@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:18:200 Zd/this.$get</k.prototype.$eval@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:112:4 Zd/this.$get</k.prototype.$apply@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:112:269 fc/c/<@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:18:158 d@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:34:474 fc/c@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:18:66 fc@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:18:270 Xc@https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:17:359 @https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js:214:78 n.Callbacks/j@https://code.jquery.com/jquery-1.11.0.min.js:2:27128 n.Callbacks/k.fireWith@https://code.jquery.com/jquery-1.11.0.min.js:2:27898 .ready@https://code.jquery.com/jquery-1.11.0.min.js:2:29742 K@https://code.jquery.com/jquery-1.11.0.min.js:2:30052
我点击了该链接,但无法查看问题所在。
这是我的控制器:
var gameApp = angular.module("gameApp", ['ngRoute','ngSanitize']);
gameApp.directive('mapActivity', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
scope.$watch('tabledata', function() {
angular.element('.click#1').addClass('dotted').html($("<img src='images/dot.png'>"));
var j = null;
for(var i = 1; i <= 4; i++)
{
$.ajax({
type: 'GET',
url: 'lib/terrain.php',
dataType: 'html',
data: {i: i},
success: function(data) {
var randomRuta = Math.floor((Math.random() * 100) + 1);
angular.element('.click#'+randomRuta).addClass('monster').html($("<img src='images/blackdot.png' title='"+data+"'>"));
},
error: function(xhr, ajaxOptions, thrownError) { alert(thrownError); }
});
j=i;
}
angular.element('.click').click(function() {
if(angular.element(this).hasClass('monster'))
{
if(confirm('Vill du anfalla monster?'))
{
alert("Du vann");
angular.element('.click.monster'+j).empty();
angular.element('.click.monster').removeClass('monster'+j);
angular.element('.click.dotted').empty();
angular.element('.click.dotted').removeClass('dotted');
angular.element(this).addClass('dotted');
angular.element('.click.dotted').html($('<img src="images/dot.png">'));
}
}
else
{
angular.element('.click.dotted').empty();
angular.element('.click.dotted').removeClass('dotted');
if(!angular.element(this).hasClass('dotted'))
{
angular.element(this).addClass('dotted');
angular.element(this).html($('<img src="images/dot.png">'));
}
}
});
});
}
};
});
function makeTableFrom(str) {
var k = 1;
result = "";
for(var i = 1; i <= 8; i++) {
result += '<tr>';
for(var j = 1; j <= 20; j++) {
if(str[k] == '#') {
result += '<td id=' + k + '">#</td>';
}
else if(str[k] == '&') {
result += '<td class="click" val="water" id="' + k + '">&</td>';
}
else {
result += '<td class="click" id="' + k + '"></td>';
}
k++;
}
result += '</tr>';
}
return result;
}
gameApp.controller("gameCtrl", function($scope,$http,link,$location,$sce,$rootScope) {
$scope.resultLoaded = false;
$scope.getMonsters = "1";
var tabledata = ""; //Variable to store pattern for html table
$http.post("../lib/action.php", {monsters: $scope.getMonsters}).success(function(data) {
//tabledata = data; //Assign the pattern
$scope.result = makeTableFrom(data); //Call the function to build the table based on the pattern
$scope.resultLoaded = true;
}).error(function(data) { console.log("error"); });
console.log(tabledata);
$scope.safeHtml = function() {
return $sce.trustAsHtml($scope.result);
};
if(link.user) {
/*$scope.message = "fisk";
console.log(link.user);*/
} else {
/*$scope.message = "Ledsen fisk";
console.log("Är inte satt");*/
}
});
这是我的HTML:
<!DOCTYPE html>
<html ng-app="gameApp">
<head>
<meta content="text/html;charset=UTF-8" http-equiv="content-type" />
</head>
<body ng-controller="gameCtrl">
<div ng-if='resultLoaded'>
<table ng-bind-html="safeHtml()" map-Activity>
</table>
</div>
</body>
</tml>
<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
<script src="https://code.angularjs.org/1.2.22/angular-route.js"></script>
<script src="https://code.angularjs.org/1.2.22/angular-sanitize.js"></script>
<script src="../js/gamecontroller.js"></script>
正如我所说,我已点击链接查看错误是由什么造成的,但我无法理解它是什么。谁可以帮助我?
答案 0 :(得分:0)
代码失败,因为控制器的注入器无法找到满足对名为&#34; link&#34;的服务的请求的方法。您是否尝试将指令中的链接功能作为服务引用?
我在链接功能中没有看到任何对用户的引用,因此您可能在其他地方提供了另一个名为链接的服务,该链接未正确创建,或者您在意味着某些其他现有服务时键入了链接。
希望有所帮助。
答案 1 :(得分:0)
我使用您的代码制作了一个plunker示例...
我改变了应用程序只是为了建立一个更好的结构,我不知道你是否按照你在这里发布代码的方式做你的应用程序,但如果你是,我强烈建议你改变它,因为在很短的时间你会感到头疼,难以维护你的代码......
无论如何,看看我的傻瓜...... link to plunker gameApp example
注意细节,例如控制器上的DI(依赖注入):
controllers.js档案
angular.module('gameApp_controllers')
.controller('gameCtrl', ['$scope', '$http', '$location', '$sce', '$rootScope', 'link',
function($scope, $http, $location, $sce, $rootScope, link){
// controller content
}]);
此外,app.js文件更干净,您只需声明您的应用程序和所需的模块
<强> app.js 强>
var gameApp = angular.module("gameApp", [
'ngRoute',
'ngSanitize',
'gameApp_controllers',
'gameApp_directives',
'gameApp_services'
]);
angular.module('gameApp_controllers', []);
angular.module('gameApp_directives', []);
angular.module('gameApp_services', []);
之后,您可以为每个事物(控制器,服务,指令,路由等)创建一个文件,或者您可以为多个事物创建多个文件(usersController.js,fooController.js等...)
您将如何组织您的应用程序取决于您,但通过这种方式,应用程序可以获得更清晰的结构并且更容易理解......
还有一件事:
代码失败,因为控制器的注入器无法找到方法 满足名为&#34; link&#34;的服务请求。你想要吗? 引用指令中的链接函数作为服务?
是的,这是真的,你没有一个&#34;链接&#34;服务,你还没有在控制器中制作DI ......