【问题标题】:Using stored colors to set dynamic background color in ng-repeat使用存储的颜色在 ng-repeat 中设置动态背景颜色
【发布时间】:2025-11-24 11:15:02
【问题描述】:

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

<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>

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

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>

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

【问题讨论】:

  • 我尝试了 [link] (*.com/questions/33246583/…) 但将第二个列表中的 ng-repeat div 更改为
    似乎什么也没做。
  • 懒得阅读你所有的代码检查这个关于如何实现用户选择的颜色的一般想法plnkr.co/edit/vDs6fXxsj1gNntwfQIwk?p=preview
  • 啊!那行得通。关于为什么这没有显示数据中的颜色而是仍然默认为黑色的任何见解? 谢谢!

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


【解决方案1】:

答案是:

在编辑颜色选择器中使用 ng-model 来显示已经选择的颜色 - 这也将新的颜色选择绑定到数据。 (角流星)

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

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

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

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

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

感谢 Daniel_L!而且我必须记住保持标题名称/变量的大小写一致。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签