Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在AngularJS中管理多个资源元素_Javascript_Ruby On Rails_Angularjs - Fatal编程技术网

Javascript 如何在AngularJS中管理多个资源元素

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

我对AngularJS很陌生,但我喜欢它的方法论,但它带来了一些我仍在适应的心态变化。(我正在使用Coffeescript和Haml。如果你看到任何与我的问题无关的我不应该/不应该做的事情,请告诉我——再说一遍,我对Angular很陌生。)

我有一个这样设置的资源:

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];
};