为什么我一直在angularJS中获取未定义的TypeError设置属性
Why I keep getting TypeError setting property of undefined in angularJS?
我正在写一个微博应用程序来自学angularJS。
现在一个烦人的问题是,我在服务、工厂和供应商方面都搞得一团糟。在搜索了它们之间的差异后,我选择了服务来填补我的应用程序中的帖子部分。
但后来我一直得到错误:TypeError:无法设置未定义的属性"get"
我的服务代码看起来像:
angular.module('mblogApp.services',[]).
service('Posts', function(){
var posts = [];
this.prototype.get = function(){return posts};
this.prototype.push = function(user, text){
var post = {
user: user,
text: text,
time: Date.now()
};
posts.push(post);
};
});
在我的控制器里,我写了一些类似的东西:
angular.module('mblogApp.controllers').
controller('makePostCtrl', ['Posts', function($scope, Posts){
posts.push($scope.user, $scope.text);
}]).
controller('showPostCtrl', ['Posts', function($scope, Posts){
$scope.posts = Posts.get();
}
]);
感谢任何良好的做法。:)。
这个问题让我很难受。我真的厌倦了。我试着让它变得简单,找出错误的来源,并将我的代码重写到一个html文件中,如下所示:
<!DOCTYPE html>
<html ng-app="app">
<head>
<title>Angular Service Demo</title>
<script type="text/javascript" src="angular/angular.js"></script>
</head>
<body>
<div ng-controller="makePostCtrl">
<label for="name">Name: </label>
<input type="text" ng-model="name">
<br>
<label for="text">Text: </label>
<input type="text" ng-model="text">
<br>
<button ng-click="post()">post</button>
</div>
<div ng-controller="showPostCtrl">
<ul>
<li ng-repeat="post in posts">
<p>Name: {{post.name}}</p>
<p>Text: {{post.text}}</p>
</li>
</ul>
</div>
</body>
<script type="text/javascript">
var app = angular.module('app', []);
app.service('posts', function(){
this.posts = function(){
var posts = [];
return {
get: function(){return posts},
push: function(user, text){
posts.push({
user: user,
text: text
});
}
};
};
});
app.controller('makePostCtrl ', ['posts',function($scope, posts){
$scope.post = function(){
posts.push($scope.user, $scope.text);
};
$scope.posts = posts.get();
}]);
app.controller('showPostCtrl')
</script>
</html>
错误如下:
TypeError:无法调用未定义的方法"get"
将服务代码更改为:
app.service('posts', function () {
var posts = [];
return {
get: function () {
return posts
},
push: function (user, text) {
posts.push({
user: user,
text: text
});
}
};
});
并且模块是按顺序注入的,您错过了"$scope",因此模块注入不匹配。
app.controller('makePostCtrl', ['$scope', 'posts', function ($scope, posts) {
我认为您的服务缺少依赖项注入。试试这个
angular.module('mblogApp.controllers',['mblogApp.services']).
试试这个代码。
在你的服务中做出这样的改变;
angular.module('mblogApp'). service('Posts', function(){
var post_values = [];
return {
get : function(){
return post_values
},
push : function(user, text){
var post = {
user: user,
text: text,
time: Date.now()
};
post_values.push(post);
}
};
});
还有你的控制器;
var app = angular.module('mblogApp');
app.controller('makePostCtrl', ['Posts', function ($scope, Posts) {
Posts.push($scope.user, $scope.text);
});
app.controller('showPostCtrl', ['Posts', function ($scope, Posts) {
$scope.posts = Posts.get();
});
相关文章:
- 如何设置html元素填充的动画
- 需要帮助设置json数组
- 当我将参数设置为对象时,JavaScript返回TypeError
- emscripten+sdl=引发异常:TypeError:无法设置属性'widthNative'的未定
- app.render[TypeError:无法设置undefined的属性'content']在Node
- 为什么我会得到错误Uncaught TypeError:无法设置属性'显示'在Javascript中未定
- getElementById TypeError: “无法将属性'innerHTML'设置为null
- 为什么我一直在angularJS中获取未定义的TypeError设置属性
- TypeError:无法设置属性"字符串”;的字符串(Javascript)中未定义
- 未捕获的TypeError无法设置属性'className'的空控制台输出
- TypeError:无法设置属性'用户'的未定义
- TypeError:无法设置属性'道具'的未定义
- javascript抛出Uncaught TypeError:无法设置属性'0'填充多维数组时未定义的
- TypeError:无法设置属性'onkeydown'的未定义
- 在3上设置顶点后.几何对象,THREE.Shape.Utils.triangulateShape失败,TypeError
- BarcodeScanner2 = TypeError:不能设置属性'innerHTML'零
- TypeError:不能设置属性''的定义
- TypeError:不能设置属性'零
- 在ngTables中,第三次运行$scope.tableParams.reload()会导致TypeError:无法设置
- Yii-CHtml::ajaxLink-TypeError:设置未定义