Javascript 如何在AngularJS中管理多个资源元素
我对AngularJS很陌生,但我喜欢它的方法论,但它带来了一些我仍在适应的心态变化。(我正在使用Coffeescript和Haml。如果你看到任何与我的问题无关的我不应该/不应该做的事情,请告诉我——再说一遍,我对Angular很陌生。) 我有一个这样设置的资源:Javascript 如何在AngularJS中管理多个资源元素,javascript,ruby-on-rails,angularjs,Javascript,Ruby On Rails,Angularjs,我对AngularJS很陌生,但我喜欢它的方法论,但它带来了一些我仍在适应的心态变化。(我正在使用Coffeescript和Haml。如果你看到任何与我的问题无关的我不应该/不应该做的事情,请告诉我——再说一遍,我对Angular很陌生。) 我有一个这样设置的资源: app.factory "ServiceRequest", ["$resource", ($resource) -> $resource("/service_requests/:id", {id: "@id"}, {upd
app.factory "ServiceRequest", ["$resource", ($resource) ->
$resource("/service_requests/:id", {id: "@id"}, {update: {method: "PUT"}})
]
app.controller "ServiceRequestController", ["$scope", "ServiceRequest", ($scope, ServiceRequest) ->
$scope.service_requests = ServiceRequest.query()
不要太花哨,特别是如果您熟悉Rails和RESTful控制器的话。现在我想在index.html.haml页面上显示这些内容
.service-request{'ng-repeat' => 'service_request in service_requests'}
.upper
#...
%a.btn{:href => "", 'ng-click' => "toggleExpand(service_request)"}
.lower{'ng-show' => 'service_request.expanded'}
#...
注意调用toggleExpand(服务请求)的按钮
所以。。直到我单击另一个更改变量的按钮,然后单击service_request.$update(),此操作才会停止。我的Rails控制器返回一个JSON服务请求变量,该变量将清除我扩展的变量。废话
$scope.acceptRequest = (service_request) ->
service_request.state_change = "accept"
service_request.$update()
管理这些非数据库变量的更好方法是什么?这些变量仅用于仍然利用Angular出色的双向绑定功能的浏览器中。
谢谢!如果您还需要代码,请告诉我。=)
//这就是我为解决问题所做的。
对于JS:
$scope.init = () ->
$scope.toggleFlags = {}
angular.forEach $scope.service_requests, (service_request) ->
$scope.toggleFlags[service_request.id] = false
$scope.toggleExpand = (id) ->
if not $scope.toggleFlags
$scope.init()
$scope.toggleFlags[id] = not $scope.toggleFlags[id]
对于HTML:
%a.btn{:href => "", 'ng-click' => "toggleExpand(service_request.id)"}
您可以做的是准备单独的flag对象,该对象与 数据对象。我假设数据对象具有名为“id”的唯一id 在你看来:
<button ng-click="toggleExpand(service_request.id)"> toggle </button>
非常感谢!感谢是一个简单而优雅的解决方案。工作得很有魅力。
<button ng-click="toggleExpand(service_request.id)"> toggle </button>
$scope.flags = {};
$scope.toggleExpand = function(id) {
flags[id] = !flags[id];
};