我正在学习angularjs并遵循 - here
的教程这是我的index.jsp -
<!doctype html>
<html lang="en" ng-app="phoneCatApp">
<head>
<title>Angular Example</title>
<script type="text/javascript" src="angular/angular.min.js"></script>
<script type="text/javascript" src="app/js/controllers.js"></script>
</head>
<body ng-controller="phoneListCtrl">
Search : -
<input ng-model="query"/> Sort by:
<select ng-model="orderProp">
<option value="name">Alphabetical</option>
<option value="age">Newest</option>
<option value="-age">Oldest</option>
</select>
<p>Total number of phones: {{phones.length}}</p>
<ul>
<li ng-repeat="phone in phones | filter:query | orderBy:orderProp"><span>{{phone.name}}</span>
<p>{{phone.snippet}}</p></li>
</ul>
</body>
</html>
此版本的controller.js有效 -
var phonecatApp = angular.module('phoneCatApp', []);
phonecatApp.controller('phoneListCtrlOld', function($scope) {
$scope.phones = [ {
'name' : 'Nexus S',
'snippet' : 'Fast just got faster with Nexus S.',
'age' : 1
}, {
'name' : 'Motorola XOOM™ with Wi-Fi',
'snippet' : 'The Next, Next Generation tablet.',
'age' : 2
}, {
'name' : 'MOTOROLA XOOM™',
'snippet' : 'The Next, Next Generation tablet.',
'age' : 3
} ];
$scope.orderProp = 'age';
});
但在下一步中,我尝试使用ajax调用获取此json数据,因此控制器看起来像这样 -
var phonecatApp = angular.module('phoneCatApp', []);
phonecatApp.controller('phoneListCtrl', function($scope, $http) {
$http.get('app/js/phones.json').success(function(data) {
$scope.phones = data;
});
$scope.orderProp = 'age';
});
但是这给了我以下错误 -
TypeError:dbg未定义。 debuggerLib.js(第530行)
我可以在firebug中看到ajax调用正在发生,代码为304 Not Modified。我可以看到数据作为回应。但响应内容类型不是json。
请仔细研究并说明问题是什么?我错过了要包含的任何js文件或其他内容。
答案 0 :(得分:11)
我遇到了同样的错误,经过一些头脑刮擦后发现 a 原因。我无法确定这是否是你的同样的原因。
重新启动Firefox,重新启动PC,删除Firebug,重新安装,优化,运行注册表清理等等 - 没有任何帮助。我在debuggerLib.js第556行遇到错误,dbg未定义。
然而,事实证明我已经安装了Firebug,它在我的漫游配置文件中创建了一个目录:
C:\Users\Leonardo\AppData\Roaming\Mozilla\Firefox\Profiles\Leonardo.Serni\firebug
在该目录中有很多JSON文件,但今天没有一个日期,这是我删除并重新安装Firebug的时候。所以我想知道,&#34;如果 new Firebug正在从这个目录中加载过时的东西怎么办?&#34;。
我关闭了Firefox,重新命名了&#34; firebug&#34;到&#34; bugfire&#34;,重新打开Firefox。
Firebug运行正常且错误已消失。我在没有重命名目录的情况下做了同样的事情并且错误没有消失,所以我确信我的假设是正确的。
目录已经重新创建,但现在只有两个文件 - &#34; annotations.json&#34;和&#34; breakpoints.json&#34;,都是0字节大小。可能有一天我会尝试添加旧目录中的文件以查看错误何时返回。
可能没有必要核对整个目录。验证annotations.json
文件的长度是否为零。如果不是,请在Firefox未运行时将其重命名为annotations.old
。
我开始怀疑dbg
实际上是调试Firebug本身,我们没有定义它,因为我们不是Firebug开发人员。它与调试我们的脚本的Firebug调试器无关。
答案 1 :(得分:3)
你可能正在使用FireFox激活了firebug 关掉萤火虫,你的问题就会消失。
我有同样的问题,其他浏览器没有问题,控制台显示错误来自debuggerLib.js
(第556行)。取消激活它会删除错误并允许我的应用程序按预期运行。
答案 2 :(得分:1)
使用此代码html head标记。
<base href="/">
...
答案 3 :(得分:1)
试试这个, 首先初始化JSON数组值是一个empty.so initialize
$scope.phones = '';
答案 4 :(得分:1)
@LSerni的解释似乎是正确的。 对于Linux系统,只需删除并重新安装Firebug插件即可。系统会自动删除所有相关文件/文件夹并重新创建它。 这对我有用。
答案 5 :(得分:0)
您遇到的错误是您的JSON文件。它应该是这样的:
[{
"name" : "Nexus S",
"snippet" : "Fast just got faster with Nexus S.",
"age" : 1
}, {
"name" : "Motorola XOOM™ with Wi-Fi",
"snippet" : "The Next, Next Generation tablet.",
"age" : 2
}, {
"name" : "MOTOROLA XOOM™",
"snippet" : "The Next, Next Generation tablet.",
"age" : 3
}]
记住方括号。
使用 .then 而不是.success
。这是.success
的改进版本,可以更有效地处理所有回调和调用。它会带回整个承诺,并通过引用.data部分即response.data
$http.get('app/js/phones.json').then(function(response) {
$scope.phones = response.data;
});
答案 6 :(得分:0)
您正在使用该号码,请使用数字或解析值来编号如下。
<code>
var myApp = angular.module('MyApp',[]);
myApp.controller("myController",function($scope){
$scope.width=50;
$scope.height=50;
});
</code>
答案 7 :(得分:-1)
对我来说问题是我忘了在控制器中定义库
app.controller("MyCtrl", function($scope, $http) { //<- here $timeout was missing
$http.get(someUrl)
.then(function(myResponse) {
$scope.myData = myResponse.data;
$timeout(function() { //<- here $timeout was called without being defined
enableWatchers = true;
});
});
});
在我将代码的第一行更改为:
后,它才有效app.controller("MyCtrl", function($scope, $http, $timeout) { //<- here I put the $timeout