使用 AngularJS 动态生成输入字段 + ng-change 绑定
Dynamically generate input fields + ng-change binding with AngularJS
我目前面临的是多方面的'problem',可以分为几个步骤。
框架的用户将能够通过 XML 文件将设置动态添加到 UI,打开设置页面时将读取该文件。
示例:
<settings>
<group>
<groupname>Profile settings</groupname>
<groupsettings>
<setting type="range" savename="volumeslider">
<label>Volume</label>
<min>0</min>
<max>10</max>
<step>1</step>
<default>5</default>
<labelleft>Low</labelleft>
<labelright>High</labelright>
</setting>
<setting type="checkbox" savename="brightnesstoggle">
<label>Brightness</label>
<default>true</default>
</setting>
</groupsettings>
</group>
</settings>
如您所见,此处定义了一个范围滑块(输入类型="range")和一个复选框(输入类型="checkbox")。
目前 XML 通过 ajax 调用进行解析
$.ajax({
type: "GET",
url: "settings/globalapp.xml",
dataType: "xml",
success: function(xml) {
$(xml).find('group').each(
function(){/* Parse code here */}
})
这被解析为一个长字符串,然后该字符串被附加到 UI 中的正确位置。
$("ul>.globalList").append(outputString);
outputString = "<input type="range" min="0" max="10" value="5" ng-model="volumeslider" ng-change="settingsInputChanged(volumeslider, 'volumeslider')">"
如您所见,我有一个 ng-change 绑定,但是当代码附加 jQuery 时这不起作用。
当我将这个字符串硬编码到我的 HTML 中时,它工作得很好(settingsInputChanged 是一个通用函数,用于将设置的值添加到 localStorage)。
我是不是完全错误地解决了这个问题,或者有 Angular 一种简单的内置方法来处理这个问题?
是的,您处理它的方式不对,HTML 在 angular 加载时被解析,这就是为什么它在硬编码时工作正常,但在动态添加时却不行。
请检查此 link 以了解如何将 HTML 动态添加到您的应用程序中
尝试使用 Angular 等效项来执行此操作。更改 DOM 中的内容通常是通过指令完成的。因此,用 $http 解析 XML 并将对象/字符串传递到呈现 html.
的指令中可能是个好主意
我目前面临的是多方面的'problem',可以分为几个步骤。
框架的用户将能够通过 XML 文件将设置动态添加到 UI,打开设置页面时将读取该文件。 示例:
<settings>
<group>
<groupname>Profile settings</groupname>
<groupsettings>
<setting type="range" savename="volumeslider">
<label>Volume</label>
<min>0</min>
<max>10</max>
<step>1</step>
<default>5</default>
<labelleft>Low</labelleft>
<labelright>High</labelright>
</setting>
<setting type="checkbox" savename="brightnesstoggle">
<label>Brightness</label>
<default>true</default>
</setting>
</groupsettings>
</group>
</settings>
如您所见,此处定义了一个范围滑块(输入类型="range")和一个复选框(输入类型="checkbox")。
目前 XML 通过 ajax 调用进行解析
$.ajax({
type: "GET",
url: "settings/globalapp.xml",
dataType: "xml",
success: function(xml) {
$(xml).find('group').each(
function(){/* Parse code here */}
})
这被解析为一个长字符串,然后该字符串被附加到 UI 中的正确位置。
$("ul>.globalList").append(outputString);
outputString = "<input type="range" min="0" max="10" value="5" ng-model="volumeslider" ng-change="settingsInputChanged(volumeslider, 'volumeslider')">"
如您所见,我有一个 ng-change 绑定,但是当代码附加 jQuery 时这不起作用。 当我将这个字符串硬编码到我的 HTML 中时,它工作得很好(settingsInputChanged 是一个通用函数,用于将设置的值添加到 localStorage)。
我是不是完全错误地解决了这个问题,或者有 Angular 一种简单的内置方法来处理这个问题?
是的,您处理它的方式不对,HTML 在 angular 加载时被解析,这就是为什么它在硬编码时工作正常,但在动态添加时却不行。 请检查此 link 以了解如何将 HTML 动态添加到您的应用程序中
尝试使用 Angular 等效项来执行此操作。更改 DOM 中的内容通常是通过指令完成的。因此,用 $http 解析 XML 并将对象/字符串传递到呈现 html.
的指令中可能是个好主意