我正在使用带有Rails的AngularJS并创建未在AngularJS范围内注册的动态嵌套表单项。他们被分配了'ng-dirty'类。
我有一个有三个房子的投资者,在我的Angular控制器中我只分配前两个,因为我真的想通过Rails设置这些。
$ (event) ->
app = angular.module "investor", []
app.controller("InvestorCtrl", ["$scope", ($scope) ->
$scope.houses = [
{ cost: "295000", value: "450000" },
{ cost: "600000", value: "620000" }
]
$scope.calc_totals = ->
# Initialise variables
cost = 0
value = 0
# Go through each house and calculate the total cost
for h in $scope.houses
cost = parseInt(cost) + parseInt(h.cost)
value = parseInt(value) + parseInt(h.value)
# Set the total
$scope.total_cost = cost
$scope.total_value = value
# Run the calculation at the start
# $scope.calc_totals()
])
angular.bootstrap document, ['investor']
这是我的表格
%div{"ng-controller" => "InvestorCtrl"}
= form_for(@investor) do |f|
- if @investor.errors.any?
#error_explanation
%h2
= pluralize(@investor.errors.count, "error")
prohibited this investor from being saved:
%ul
- @investor.errors.full_messages.each do |msg|
%li= msg
.field
= f.label :name
= f.text_field :name, "ng-model" => "name"
- i = 0
= f.fields_for :houses do |builder|
.field
= render :partial => "house", :locals => {:f => builder, :i => i}
- i = i + 1
.field
= f.label :total_cost
= f.number_field :total_cost, "ng-model" => "total_cost"
.field
= f.label :total_value
= f.number_field :total_value, "ng-model" => "total_value"
.actions
= f.submit
如果我键入第一个或第二个房子'cost'或'value',那么它会更新total_cost,但如果我更新第三个房子,它将不会更新total_cost。
有没有办法动态告诉angularjs监听这些元素而不在控制器中分配它们?
答案 0 :(得分:0)
你真的对此有点不对,IMO。由于Angular可以(并且将会)为您处理重复HTML的呈现,因此您不一定需要在服务器上进行HTML呈现。您在服务器上所需要的只是一些JSON。如果您想要立即渲染它,您只需确保在初始化控制器时正确设置初始值。
将$ http或自定义服务注入您的控制器,并以JSON格式直接从服务器提取您想要的数据,然后将其插入您的范围。如果您的HTML和指令设置正确,它将只渲染。从那里,所有其他逻辑将是相同的。
网络向前发展。而且,通过前进,我的意思是你曾经在服务器上做的所有HTML渲染实际上开始越来越多地在客户端上完成。您曾经用于在Web服务器上获取数据的服务层?那么现在是你的网络服务器。
我知道这不是你问题的直接答案,但它会大大简化你想要做的事情。否则你有一个平衡的行为,会很快发疯。