AngularJS - 从数据库动态创建数据集和模型绑定
所以。 这是我第一次Angular冒险,但自-97以来,我一直在编码从db到php到html/js的网页。AngularJS - 从数据库动态创建数据集和模型绑定
我在我正在构建的应用程序中使用AngularJS v1.6.5,http://jtblin.github.io/angular-chart.js/和https://material.angularjs.org/latest/demo/slider。 (无法发布所有代码或由于客户的链接)
从本质上讲,我有一个休息API面向数据库,每个数据库都有一个区域,每个区域都有一个滑块。每个滑块都将绑定到自己的数据集,移动滑块将影响多个图表中的元素,方法是使用另一个数据集,并保存每个滑块区域唯一的因子。
如果我对所有滑块进行硬编码并将它们绑定到正确的数据集,它就会像所有应用一样工作。每个滑块绑定到它自己的模型,移动滑块来更改图表中的数据,非常棒。
但是由于数据库可以获得更多的区域或更少的区域,所以我自然希望从控制器中的db-data创建模型和滑块的所有数据集,并将每个滑块绑定到正确的数据集,方法是通过ng-重复。要添加到它,将更改相同的数据集将从滑块传递到更新图表之前进行计算的服务。
我的路由指定“ChartController as chart”,并在控制器中执行“var chartdata = this;”所以我没有使用模型的实际$范围。
在控制器中,我有一个数据集包含API的区域,它将获得一个滑块,它包含一个名称和一个id,然后我将为每个滑块生成数据集,以保存来自另一个API调用的滑块值。
所以我会在控制器产生从数据库中数据的多个数据集,当时的想法是他们的名字一样,这些地方的滑块区域的ID在模型名的末尾号:
//default slider settings from database
chartdata.slider_id_1 = 4;
chartdata.slider_id_2 = 3;
chartdata.slider_id_3 = 2;
chartdata.slider_id_4 = 6;
chartdata.slider_id_5 = 4;
chartdata.slider_id_6 = 7;
chartdata.slider_id_7 = 3;
chartdata.slider_id_8 = 9;
chartdata.slider_id_9 = 5;
chartdata.slider_id_10 = 8;
chartdata.slider_id_11 = 12;
chartdata.slider_id_12 = 1;
chartdata.slider_id_13 = 2;
// weighting for impact
chartdata.factor_id_1 = 0.24;
chartdata.factor_id_2 = 0.46;
chartdata.factor_id_3 = 0.97;
chartdata.factor_id_4 = 0.62;
chartdata.factor_id_5 = 0.125;
chartdata.factor_id_6 = 0.166;
chartdata.factor_id_7 = 0.33;
chartdata.factor_id_8 = 0.698;
chartdata.factor_id_9 = 0.489;
chartdata.factor_id_10 = 0.44;
chartdata.factor_id_11 = 0.12;
chartdata.factor_id_12 = 0.1;
chartdata.factor_id_13 = 0.22;
然后,我在我的模板中迭代滑块区域数据集,这是我想动态创建模型名称的位置。即。将chart.slider_id_XX和chart.factor_id_XX映射到生成的数据集。
<div ng-repeat="slider in chart.sliders">
<div flex="20" layout layout-align="center center" >
<span class="md-body-1">{{slider.Name}}</span>
</div>
<md-slider flex md-discrete ng-model="chart.slider_id_11" step="1" min="0" max="100" aria-label="{{slider.Name}}" id="{{slider.Id}}" ng-click="updateImpact(chart.slider_id_11,chart.factor_id_11);">
</md-slider>
</div>
这样我就可以在某些地方使用sliderdata的名称和ID,但不是在模型绑定在哪里,在服务器端会连接到一起与滑块对象的ID字符串,但在这里不起作用,可能是由于JavaScript和ng指令被处理的顺序。
我已经看过类似的问题一整天,但他们倾向于只解决它的一面,或看似,使用模型集合并通过数组索引引用,但我不能为我的生活让它工作。
我可以诉诸硬编码,只是为了解决问题,但它会觉得很愚蠢。
我可以完全控制所有的代码,从SQL查询到数据结构到js代码的所有内容,而且我没有锁定上述示例,所以我在实现智能方面非常灵活,如果有一个被发现的话,那么就是一个很好的练习方案。
感谢这里的所有帮助! /Dan
您可以像这样创建动态模型绑定。
创建一个通用对象来保存所有滑块的值。
$scope.SliderDTO = {};
现在绑定NG-模型在滑块是这样的:
<md-slider flex md-discrete ng-model="SliderDTO[slider.Name]" step="1"
min="0" max="100" aria-label="{{slider.Name}}" id="{{slider.Id}}" ng-
click="updateImpact(chart.slider_id_11,chart.factor_id_11);">
</md-slider>
最后选定的值将作为可用这样的:
对于滑名slider_id_1值将在$范围。 SliderDTO.slider_id_1
谢谢。 我曾试过类似的事情,但没有得到它的工作,但我会再试一次:) – DmSProject
非常感谢你! 这一次,我得到了一切工作完美,从动态生成的滑块绑定到每个拥有模型,我现在也可以动态生成,将正确的参数传递给点击功能:) 不能upvote由于我的声誉太低,但将其标记为可行的答案。再次感谢你:) – DmSProject
很高兴知道它为你工作。乐于帮助 :) –