【发布时间】:2017-02-19 13:50:28
【问题描述】:
我是一名从事业余项目的 Java 开发人员。我决定使用 AngularJS 来使用我的 RESTful 网络服务。
我的 JSON 结构如下:
[
{
"generatorName": "name1",
"constructorParams": [
{
"type": "Boolean",
"value": "true",
},
{
"type": "Integer",
"value": "2",
}
]
},
{
"generatorName": "name2",
"constructorParams": [
{
"type": "Integer",
"value": "10",
},
{
"type": "Integer",
"value": "10",
}
]
}
]
我的目标是根据构造函数参数的“类型”显示特定的(例如数字、文本等)输入字段,并用“值”对其进行初始化。所以,如果第一个生成器被选中,我想要这样的东西:
<html>
<select>
<option selected="selected" value="true">Yes</option>
<option value="false">No</option>
</select>
<input type="number" value="2">
<html>
我已经阅读了一些主题并决定在我的循环中使用自定义指令:
<p ng-repeat="param in selectedGenerator.constructorParams">
<constructor-param param="{{param}}"></constructor-param>
</p>
这是我的自定义指令:
app.directive("constructorParam", function() {
return {
scope : {
param : '@'
},
templateUrl : '/html_templates/constructor_param_template.html'
};
});
这是模板:
<div ng-switch="{{param.type}}">
<div ng-switch-when="Integer">
<input type="number" ng-attr-name="{{param.type}}" min="0" ng-attr-value="{{param.value}}">
</div>
<div ng-switch-when="Boolean">
<select ng-if="{{param.value}}" ng-attr-name="{{param.type}}">
<option selected="selected" value="true">Yes</option>
<option value="false">No</option>
</select>
<select ng-if="!{{param.value}}" ng-attr-name="{{param.type}}">
<option value="true">Yes</option>
<option selected="selected" value="false">No</option>
</select>
</div>
<div ng-switch-when="String">
<input type="text" ng-attr-name="{{param.type}}" ng-attr-value="{{param.value}}">
</div>
<div ng-switch-when="Double">
<input type="number" ng-attr-name="{{param.type}}" step="0.01" min="0" ng-attr-value="{{param.value}}">
</div>
</div>
这些不起作用。我可以在 Chrome 开发人员的工具中看到该指令已运行,但它不提供任何可见的输出。我的问题是:
1) 我是否在自定义指令元素中正确传递了 param 对象?
2) 我不确定指令的 scope - 我也尝试过 param : '=param' - 它也不起作用...
3) 我应该如何读取模板中传递的对象的属性?我试过:value="{{param.type}}"、value={{param.type}} 和 ng-attr-value="{{param.value}}"。没有一个有效,但可能有完全不同的原因......
4) 我可以为所有此类元素的 HTML 属性(如名称和值)使用前缀“ng-attr-”吗?
5) 我的模板代码与我粘贴的完全一致——我是否需要将其设为包含头部、主体等的有效 HTML 结构?我必须用 AngularJS 附加<script> 吗?我已经这样做了,但再一次,没有任何变化。
6) 整个故事的使用场景是从下拉列表中选择一个具体的生成器,并以指定的方式显示它的构造函数参数。所以它必须通过生成器的更改来重新生成 HTML。我假设它是在 ng-repeat 循环中完成的,但请确认。
非常非常感谢您的意见! :)
【问题讨论】:
标签: angularjs dynamic angularjs-directive angularjs-templates