我需要用 ng-value 发送隐藏字段的值 我把要发送文本内容类型的代码
<form>
<div class="comment_it commentupdate">
<div class="up_img">
<img src="" width="35" height="35" />
</div>
<div class="comments-text-post-area">
<input type="hidden" ng-model="c.cid" ng-value="'{{p.id}}'">
<textarea class="add-y-comment" ng-model="c.comment" placeholder="Comentar"></textarea>
</div>
<div class="comment-post-wall">
<div class="cancel-comment">
<button type="button" name="button" id="">CANCELAR</button>
</div>
<div class="send-comment">
<button type="submit" name="button" ng-click="c.addComment()">ENVIAR</button>
</div>
</div>
</div>
</form>
在 Chrome 控制台中,我只捕获在 textarea 中键入的文本。p.id 是要评论的帖子的值
angular .module('apiFromApp')
.controller('CommentController', CommentController);
CommentController.$inject = ['$http'];
/* @ngInject */
function CommentController($http) {
var self = this;
//sendComment();
self.addComment = function() {
console.log(self);
}
}
这是一个已知的角度问题,有一种简单的方法可以解决它。
我将首先说您不应该使用ng-value绑定隐藏类型的输入
随着时间的推移,该指令被设计为与radio类型的选项元素和输入元素一起使用。您正在使用隐藏类型,因此它不起作用。
您还应该知道ng-model指令不适用于 hidden 类型的输入。关于是否使用它存在广泛的争论,但基本上,为了让它在所有版本的 Angular 中工作,你应该使用以下替代方案。
对属性使用简单绑定,
value
以便输入具有正确的值如果要更改表达式的值以模拟 ng-model 的行为,则必须使用ng-init指令或在控制器中手动分配表达式
将以上所有内容放在一个示例中
就个人而言,我不太喜欢使用 ng-init,你应该在你的控制器中添加它,因为这些应该始终是处理逻辑的控制器,并且滥用 ng-init 会产生非常微妙且难以发现的错误。
尽管在标题中您说“发送隐藏字段的值”,但使用 AngularJs 的应用程序中通常不会发送表单数据的标准发送,而是从控制器发送值正在获取对服务的调用(这将向服务器发出 AJAX 请求)。
作为devconcept答案的补充,我想提供另一种既没有表单也没有隐藏字段的解决方案。
我会在视图中看到的是:
控制器代码将是:
此实现的关键是使用
ng-init="c.postId=post.id"
将帖子标识符传递给评论提交控制器。注意:正如 devconcept 所说,该指令不应被滥用
ng-init
,但在这种情况下,它的使用是合理的。此外,在使用指令时,
ng-init
必须考虑到,在创建控制器实例时,初始值尚不可用。在这种情况下,可以做的是在控制器中定义一个接收初始值的方法。
控制器将更改为:
视图看起来像这样:
此外,以另一种方式,它甚至更干净(你可以看到它在这个 Plunker中工作)