Javascript 从控制器中修改范围变量。电话后
好的,那么,让我们从道歉开始,如果之前有人问过这个问题,而且这个问题非常愚蠢,我真诚地道歉 我是AngularJS的新手,最近成功地克服了CORS错误,通过解析登录,我甚至用Express.js在NodeJS中为我的应用程序编写了一个API,我刚刚遇到了一个有点困难的障碍 基本上,我有一些代码,如下所示:Javascript 从控制器中修改范围变量。电话后,javascript,angularjs,node.js,Javascript,Angularjs,Node.js,好的,那么,让我们从道歉开始,如果之前有人问过这个问题,而且这个问题非常愚蠢,我真诚地道歉 我是AngularJS的新手,最近成功地克服了CORS错误,通过解析登录,我甚至用Express.js在NodeJS中为我的应用程序编写了一个API,我刚刚遇到了一个有点困难的障碍 基本上,我有一些代码,如下所示: $http.get('http://localhost:3000/users?id=' + CryptoJS.MD5(config.SERVER_KEY)).then(fun
$http.get('http://localhost:3000/users?id=' + CryptoJS.MD5(config.SERVER_KEY)).then(function(resp) {
//console.log('Success', resp);
$scope.post = resp.data;
}, function(err) {
console.error('ERR', err);
$scope.post = err;
})
我的API路由器/用户实际上有误导性,但这只是从我的数据库中获取了一堆帖子并显示出来。查看是否成功,它会将其保存在$scope.post变量中,但例如,假设我“完成”了一篇文章,并且已经看到了该文章。单击按钮“移除”后,它将从阵列中移除。下面是我的代码的外观:
$scope.next = function() {
$scope.post.shift();
}
不幸的是,它似乎不起作用。我甚至尝试过“删除$scope.post[0]”,但都失败了
我很确定我做错了什么,如果有人能帮我指出我的错误或正确的方向,那就太好了?多谢各位
编辑,以下是我的HTML页面代码的外观:
<div class="item center">
<h2>{{post[0].title}}</h2>
</div>
<div class="item item-body" align="center">
<div ng-if="post[0].postType == 'image'">
<img src="{{post[0].postBody}}" height="{{width}}" width="{{width}}" />
</div>
<div ng-if="post[0].postType == 'text'">
<p>"{{post[0].postBody}}"</p>
</div>
<div class="item tabs tabs-secondary tabs-icon-left">
<a class="tab-item" ng-onClick="next()">
<i class="icon ion-arrow-right-c"></i>
NEXT!
</a>
<a class="tab-item" href="#" ng-onClick="like({{post[0].id}})">
<i class="icon ion-heart"></i>
Like ({{post[0].likes}})
</a>
</div>
</div>
首先,这将是一个评论,但我没有代表评论。我刚刚测试了您的代码,假设$scope.post是一个有效的对象或字符串数组,它就可以工作了 我假设响应中还有其他内容,数据是数组吗?如果不是,那就是你的问题。从resp中删除“.data”部分
$scope.post = resp.data;
编辑:lol,所以问题在html中,来自评论:
这条线
<a class="tab-item" ng-onClick="next()">
应该是
<a class="tab-item" ng-click="next()">
提醒我们,ng click是javascript的“onClick”的非直观转换 因为
$scope.post
是一个数组,我假设您可能会在视图中使用绑定到当前作用域中的“下一步”按钮来循环使用this
<ul>
<li ng-repeat="p in post">
{{ p }}
<button ng-click="next( $index )">Next</button>
</li>
</ul>
您是否尝试过$scope.post.splice(0,1);(假设您确定它是数组中的第一项)如何失败?您在操作之前和之后是否执行了console.log?什么都没变吗?或者(从数组中删除项目的)操作成功了,但您在视图中看不到它吗?@laggingreflection我认为这可能是实际发生的操作,但不会更新。您能告诉我如何做$scope.post的console.log吗?比如它应该放在哪里?在$scope内。下一步?因为出于某种原因,这不起作用。@Ajmajma是的,我也试过,但看看LaggingReflect的答案,这可能就是问题所在,重新加载。试过了,但使用ng repeat=“p in post”似乎只是显示了页面上的所有帖子,我现在要用页面的实际代码更新我的答案。非常感谢。数据包含主数组,这是什么意思?请你详细说明一下,谢谢!这只是一个关于resp.data是否实际上是一个数组的故障安全问题-看起来是这样的,您可以安全地忽略它。无论如何,还需要尝试设置$scope.post.data=resp.data;不要问我为什么,但有时候angularjs会将一个对象视为不可变的,除非它在另一个对象中。我只知道这是字符串的问题。但是试一下,以防万一。不应该超过两分钟。如果这不起作用,没有其他人有答案,我建议发布更多的代码。不,不幸的是,它不起作用。我会继续努力,非常感谢你的帮助!真糟糕。祝你好运为了省去一件事,我对$scope.next()函数进行了逐字测试(因为这也需要2秒钟),这适用于任何普通数组,所以问题出在别处。我想可能是屏幕上的更新。也许它只是没有在屏幕上显示更新。回到拉金的建议。我正在用数据和它的外观更新我的帖子。
<ul>
<li ng-repeat="p in post">
{{ p }}
<button ng-click="next( $index )">Next</button>
</li>
</ul>
$scope.next = function( i ) {
$scope.post.splice( i, 1 );
}