Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS指令为ng中的每个项目设置不同的值,仅重复一次_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS指令为ng中的每个项目设置不同的值,仅重复一次

Javascript AngularJS指令为ng中的每个项目设置不同的值,仅重复一次,javascript,angularjs,Javascript,Angularjs,我正在重复一个指令,需要设置从每个实例的颜色数组中随机选择的背景颜色 我已经试过了,但是每次运行链接函数时,它都有一个新的颜色集 link: ( scope, element, attrs ) -> colors = ["#ED6533", "#33EDC4", "#ED325D", "#33BCF2", "#EDC434", "#ED33BC"] scope.bgcolor = colors[Math.floor(Math.random() * colors.length)];

我正在重复一个指令,需要设置从每个实例的颜色数组中随机选择的背景颜色

我已经试过了,但是每次运行链接函数时,它都有一个新的颜色集

link: ( scope, element, attrs ) ->

  colors = ["#ED6533", "#33EDC4", "#ED325D", "#33BCF2", "#EDC434", "#ED33BC"]
  scope.bgcolor = colors[Math.floor(Math.random() * colors.length)];

如何在每个指令实例上只设置一次该值?

尝试将
作用域:{}
添加到指令中,其中放置了链接函数:

...
scope: {},
link: ( scope, element, attrs )...
...

使用
::
绑定:

<directive:color style="background-color: {{::bgcolor}}" class="block" ng-repeat="i in items">asdf</directive:color>
asdf

看看

追踪方式似乎是解决方案。问题是列表正在刷新并重新绘制所有元素

幕后ngRepeat向每个任务添加$$hashKey属性以跟踪它。如果使用服务器上的新任务对象替换原始任务,即使这些对象实际上与原始任务完全相同,它们也不会具有$$hashKey属性,因此ngRepeat不会知道它们代表相同的元素。 在Angular 1.2中,对ngRepeat的语法做了一个新的添加:惊人的令人敬畏的track by子句。它允许您为ngRepeat指定自己的密钥,以便识别对象,而不仅仅是生成唯一的ID。这意味着您可以将上述内容更改为ng repeat=“task in tasks track by task.id”,并且由于原始任务和服务器上更新的任务中的id相同,因此ngRepeat将知道不重新创建DOM元素并重用它们


链接应该只在添加元素后运行一次,如何构建ng repeat?您的ng repeat可能会在不应该重建整个列表时重建整个列表。普朗克会很好。另外,您希望所有元素的背景颜色都是随机的(因为每个元素的颜色不同)还是一个通用的背景颜色?您能解释一下您的意思吗?如何在每个指令实例上只设置一次值?因此每个重复的元素应该有不同的颜色,但它们应该在页面加载时设置,并在加载后保持不变。你说得对@Broisasse链接只应该调用一次。这是用户配置文件的指令列表。似乎每次应用程序检查用户的联机状态时,Ng repeat都在重建列表。@项,您能提供工作示例吗?在plunkr或JSFIDLE上?我很确定您只需要使用
trackby
,但工作示例可以帮助您理解