AngularJS:如何将视图中指定的模型(ng-bind)绑定到通过API可用的$资源
AngularJS: How to bind a model specified in the view (ng-bind) to a $resource available through an API?
我正在尝试(在Angular中,在客户端)通过html视图将同一个数据库对象连接到它的等价实例,通过json API。
我有一个工作api和$resource,还有一个工作视图,我只是不知道如何创建绑定,所以视图的更新会更新Angular模型/$resource。
具体来说,我有一个html视图填充的服务器端,其中包含ngBind属性:
<div class="ng-scope" ng-app="Posts">
<div class="ng-scope" ng_controller="PostsCtrl">
<span contenteditable="true" ng-bind="post.1.text">post.1.text value</span>
</div>
</div>
页面上有几个具有唯一ID的。出于示例的目的,如果更容易将其视为表单文本字段,则忽略"contenteditable",我将单独处理该部分。
该属性的格式是灵活的,这就是目前的情况(即post.1.text可以是post_1_text,也可以根据需要完全拆分。)
资源工厂看起来是这样的(咖啡脚本,但js中的回答同样感激!:
app = angular.module 'Posts', ['ngResource']
app.factory 'Post', ($resource) ->
$resource('/api/posts/:id', {id: '@id'})
app.controller "PostsCtrl", @PostsCtrl = ($scope, Post) ->
$scope.posts = Post.query()
它成功地填充了posts集合(本例不需要,但显示API正在工作)。
那么,ng-bind应该是什么样子,以及如何绑定控制器以获得写回API的视图更新?
(我知道我可以使用ng_repeat: "post in posts"
,但我真的很想这样做。"这很复杂":-)
谢谢!
编辑:这里有一个jsfiddle,大致展示了我试图实现的目标:
http://jsfiddle.net/2QfVW/5/
但是我希望id绑定到对象键"id",而不是绑定到数组中对象的索引。
这里有一个jsFiddle的分叉,有三种变体,这样您就可以看到不同的方法。
我使用了更简单的语法进行绑定。我想您会发现使用{{大括号}}更容易阅读您的代码。
您的数据设置为一个数组,因此您需要通过数组中的索引来引用它。在我对您的原始代码的修订中,我只是添加了索引。可能没那么有用。
John is {{friends[0].name}} and has id {{friends[0].id}}
下一次添加到您的代码中时,我在js中添加了范围变量,并将它们分配给索引值,这样您就可以在视图中使用这些变量名。可能不是你会使用的方法,但只是给你一个选择的想法。
Joy is {{friends[joy].name}} and has id {{friends[joy].id}}
$scope.joy = 1; // in the javascript
很可能您想要创建一个查找函数,这是您将看到的下一个添加。在这里,我传入要查找的朋友的id,并循环查找匹配项,然后返回整个朋友对象。在视图中,我可以引用朋友的任何属性。"9"也可以是一个变量名。
Peter is {{getFriend(9).name}} and has id {{getFriend(9).id}}
$scope.getFriend = function(fid) {
angular.forEach($scope.friends, function(friend, key) {
if (friend.id == fid) {
found = friend;
}
});
return found;
};
这有助于回答你的问题吗?我最初的回复应该解释缺失的内容,以便更新模型。
你的问题有点令人困惑,所以如果我不在,请澄清。
我相信你错过的是一个可以用来触发更新的事件。也许您可以详细解释一下UI是如何工作的。用户是否单击按钮提交帖子?是否要根据秒数自动提交?是否希望在每次更改后提交?模糊?
无论事件/计时器是什么,您都可以在控制器中使用它来触发模型保存(或者您想对模型执行的任何操作)。在这种情况下,您只需从视图中引用$scope.post(或其他),因为视图和控制器之间的双向绑定在Angular中是自动的(假设您注入了scope模块)。您不应该在视图中使用ng绑定或ng作用域。
希望我没有完全误解你的问题。
Darryl
- 对API数据使用声明性绑定
- 敲除:可观察数组没有被正确绑定——只有1个结果显示,而api返回6
- 在Web应用程序中绑定API和模板路由的位置
- AngularJS:如何将视图中指定的模型(ng-bind)绑定到通过API可用的$资源
- 使用 Web API 编辑获取数据时,无法将数据绑定到 jqgrid 中的下拉列表
- 谷歌地图api检查标记在绑定范围内
- 尝试将JS绑定到html图像url - 使用WP主题定制器API
- 谷歌地图API 3 - 绑定后删除圆圈
- 无法在 MVC 中使用 jquery/js 将 json 数据(API 结果)绑定到下拉列表
- PubNub 如何将您的帐户与 JavaScript API 绑定
- 使用外部 API 的数据绑定基诺 UI 网格
- 来自外部API的React组件的绑定数据
- 如何将事件处理程序绑定到Google Maps V3 API默认PanControl's单击事件
- Youtube播放器api如何将getCurrentTime()绑定到表单输入
- backbonejs前端通过api绑定到nodejs后端
- API上的jQuery;t自动绑定
- 从API绑定动态数据到FlipView控件
- Angular JS从api绑定到下拉菜单
- application for Office JS API:如何绑定除RichText以外的任何内容控件
- 谷歌地图Api V3:如何将标记绑定到多边形的顶点