javascript - 使用存储的颜色在 ng-repeat 中设置动态背景颜色

标签 javascript html angularjs-ng-repeat background-color color-picker

我的用户可以在“主题”中输入标签和颜色。

<form>
        <label>Name<input class="additional-input" type="text" ng-model="newTheme.name"></label>
        <label>Color<input class="additional-input" type="color" ng-model="newTheme.color" value="#FFFFFF"></label>
        <button class="hot-button" ng-click="addTheme()">+ Add Theme</button>
    </form>

然后我希望能够在已输入颜色的标签列表中看到颜色作为默认值。现在这些标题下的颜色选择器具有默认的黑色 - 有没有办法将默认值设置为存储在数据中的颜色?以下是来自 Controller 的虚拟数据:

var i;
$scope.itemsList = {
    items1: [],
    items2: [],
    items3: []
};

for (i = 0; i <= 5; i += 1) {
    $scope.itemsList.items1.push({'Id': i, 'Label': 'Item A_' + i, "Color": '#CE93D8'});
}

for (i = 0; i <= 5; i += 1) {
    $scope.itemsList.items2.push({'Id': i, 'Label': 'Item B_' + i, "Color": '#CE93D8'});
}
for (i = 0; i <= 5; i += 1) {
    $scope.itemsList.items3.push({'Id': i, 'Label': 'Item C_' + i, "Color": '#CE93D8'});
}

以及显示框的 html(我使用 ng-sortable 来使它们拖放):

<div id="horizontal-container">
    <div class="sortable-row" as-sortable="sortableCloneOptions" data-ng-model="itemsList.items1">
        <div id="big-item" ng-repeat="item in itemsList.items1" as-sortable-item>
            <div as-sortable-item-handle>{{item.Label}}</div>
            <div> <input type="color" value=item.color> </div>
        </div>
    </div>
</div>

然后第二个问题是我想将另一组带有这些标签的盒子的背景颜色设置为与盒子中的标签一起存储的颜色(在非虚拟数据中,这些都是不同的颜色)。 “bgcolor = item.color”是我的尝试。下面还显示了我尝试过脚本标签,但我认为它不适用于 ng-repeat?当我将 item.color 从双引号中取出时,它破坏了整个 div。

    <div class="col-sm-2 col-xs-2">
        <div class="column">
            <div class="columnHeader">
                <span class="comp-title">{{client.profile.name}} Comp 1</span>
            </div>
            <div id="big-item" class="sortable-row" as-sortable="sortableOptions" data-ng-model="itemsList.items3">
                <div ng-repeat="item in itemsList.items3" as-sortable-item>
                    <div id="boxes" as-sortable-item-handle bgcolor= item.color>{{item.Label}}
                    <script>
                    document.getElementById("boxes").style.backgroundColor = "item.color"; </script>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

我希望当人们更改顶行框中的主题颜色时,这些列表中制作的所有这些主题框的背景颜色都会改变 - 但这可能是一个数据绑定(bind)问题用真实数据来解决。 (底部列表的实际数据将具有有序标签/主题的分组,这些标签/主题会引用第一个颜色列表)。谢谢!

最佳答案

答案是:

在编辑颜色选择器中使用 ng-model 来显示已经选择的颜色 - 这也会将新的颜色选择绑定(bind)到数据。 (以 Angular meteor 表示)

<input type="color" ng-model="item.Color">

^^第三个代码框中的第5行

要使用 ng-repeat 内数据中存储的背景颜色,请添加 ng-style 标签,如下所示:

<div as-sortable-item-handle ng-style="{'background': item.Color}">{{item.Label}}</div>

^^替换第 4 个代码框中的第 8-11 行

谢谢丹尼尔_L!而且我必须记住保持 header 名称/变量的大小写一致。

关于javascript - 使用存储的颜色在 ng-repeat 中设置动态背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34403719/

相关文章:

javascript - 访问父 Controller 范围时出现问题(AngularJS)

javascript - 如何使用 AJAX 将 Javascript 数组传递给 PHP 文件?

html - 是否可以使 CSS 类相互扩展?

html - 如何对齐这些元素才能对齐?

javascript - 使用 ng-repeat 时如何获取数组的规范化值

Angularjs ng-repeat数组中的数组

javascript - 基于 JS 的 influxdb 图形编辑器,如 Grafana、Influga,是否有可重用的库?

javascript/jquery - 如何获取尚未添加到 dom 的元素/css 类的宽度

javascript - phonegap - 在智能手机上获取默认音乐文件夹的跨平台方式

angularjs - 在Angularjs中,如何在删除行后更新表数据