为什么不评论这项工作?thinkster.io,angularjs教程,平均值,递增投票()
我在这里学习thinkster angular js教程: 点击评论旁边的upvotes图标无法增加upvote计数 在index.html内联包含的ui路由器模板中,ng单击调用addUpvote,但addUpvote由另一个状态中指定的控制器定义。因此,模板调用addUpvote的唯一方法是模板的关联状态/控制器以某种方式从另一个状态/控制器继承。事实上,根据这里的ui路由器文档: 在my app.js中定义状态的方式 app.js:为什么不评论这项工作?thinkster.io,angularjs教程,平均值,递增投票(),angularjs,angular-ui-router,Angularjs,Angular Ui Router,我在这里学习thinkster angular js教程: 点击评论旁边的upvotes图标无法增加upvote计数 在index.html内联包含的ui路由器模板中,ng单击调用addUpvote,但addUpvote由另一个状态中指定的控制器定义。因此,模板调用addUpvote的唯一方法是模板的关联状态/控制器以某种方式从另一个状态/控制器继承。事实上,根据这里的ui路由器文档: 在my app.js中定义状态的方式 app.js: app.config([ '$stateProvider
app.config([
'$stateProvider',
'$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('home');
$stateProvider
.state('home', {
url: '/home',
templateUrl: '/home.html',
controller: 'MainCtrl' }
)
.state('posts', {
url: '/posts/{id}',
templateUrl: '/posts.html',
controller: 'PostsCtrl' }
);
}]);
…第二种状态继承自第一种状态编辑:更仔细地阅读文档让我相信这不是真的;我认为为了让posts状态从home状态继承,我必须将posts状态的名称更改为home.posts。然而,当我尝试这样做时,它破坏了其他东西:帖子旁边的评论链接不再起作用。无论如何,我不认为写:
$stateProvider
.state(...)
.state(...);
在两个状态之间创建任何继承
这是第一个州的控制器:
app.controller('MainCtrl', ['$scope', 'posts', function($scope, posts) {
$scope.posts = posts.posts;
/*
[
{title: "post1", upvotes: 3, link: ''},
{title: "post2", upvotes: 5, link: ''},
{title: "post3", upvotes: 1, link: ''}
];
*/
$scope.addPost = function() {
var title = $scope.title;
if (title && (title.trim().length > 0) ) {
$scope.posts.push({
title: title,
upvotes: 0,
link: $scope.link,
comments: [
{author: 'Joe', body: 'Cool post!', upvotes: 0},
{author: 'Bob', body: 'Great idea, but everything is wrong!', upvotes: 0}
]
});
}
$scope.title = '';
$scope.link = '';
}
//*****HERE IS THE FUNCTION THAT IS NOT BEING CALLED*****
$scope.addUpvote = function(post) {
console.log("in addUpvote");
++post.upvotes;
}
}]);
据我所知,我的模板应该能够调用addUpvote。但是,当我单击注释旁边的upvote图标时,console.log行不会输出任何内容,因此显然没有调用addUpvote
以下是index.html的一部分:
<body ng-app="flapperNews">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<ui-view></ui-view>
</div>
</div>
....
....
....
<script type="text/ng-template" id="/posts.html">
<div class="page-header">
<h3>
<a ng-show="post.link" href="{{post.link}}">
{{post.title}}
</a>
<span ng-hide="post.link">
{{post.title}}
</span>
</h3>
</div>
<div ng-repeat="comment in post.comments | orderBy:'-upvotes'">
<span class="glyphicon glyphicon-thumbs-up"
ng-click="addUpvote(comment)"></span>
{{comment.upvotes}} - by {{comment.author}}
<span style="font-size:20px; margin-left:10px;">
{{comment.body}}
</span>
</div>
</script>
</body>
在该模板的底部,ng click calls addUpvote。为什么不调用addUpvote。文档中的解释更进一步: 仅按视图层次结构进行范围继承 请记住,作用域属性只继承状态链 如果州的视图是嵌套的。范围继承 属性与状态和属性的嵌套无关 与视图模板嵌套有关的所有内容 您完全有可能拥有其模板的嵌套状态 在站点中的各种非嵌套位置填充ui视图。在里面 在这种情况下,您不能期望访问的范围变量 子状态视图中的父状态视图 以及: 子状态从父状态继承什么 子州从父州继承以下内容: 通过resolve解决依赖关系 自定义数据属性 没有继承任何其他内容—没有控制器、模板、url等。 ... ... 子状态将从父状态继承数据属性,而父状态 它们可以覆盖 为了让评论有效,我做了以下几点:
app.controller('PostsCtrl', [
'$scope',
'$stateParams',
'posts',
function($scope, $stateParams, posts) {
$scope.post = posts.posts[$stateParams.id];
$scope.addUpvote = function(comment) {
console.log('comment upvote');
++comment.upvotes;
}
}]);
我也有同样的错误,当我在cURL中运行url时,它返回req.comment.upvote不是错误堆栈顶部的函数 C:\Users\ddavis>curl-X PUT req.comment.upvote不是一个函数 在我的例子中,当我在comments.js模型中定义一个upvote函数时,它起了作用,如下所示: var mongoose=需要“mongoose”; var CommentSchema=newmongoose.Schema{ 正文:字符串, 作者:String, UPVOUTES:{type:Number,默认值:0}, posts:[{type:mongoose.Schema.Types.ObjectId,ref:'Post'}] }; CommentSchema.methods.upvote=functioncb{ 该值为+1; 这是savecb; }; 模型“注释”,注释模式;
app.controller('PostsCtrl', [
'$scope',
'$stateParams',
'posts',
function($scope, $stateParams, posts) {
$scope.post = posts.posts[$stateParams.id];
$scope.addUpvote = function(comment) {
console.log('comment upvote');
++comment.upvotes;
}
}]);