将值存储在指令中供以后使用

时间:2015-06-18 13:49:09

标签: javascript angularjs angularjs-ng-repeat ng-repeat

我想在ngRepeat中保存一个对象,以便我可以在其子代中使用该对象,如以下代码所示:

<div ng-repeat="bar in foo.bar> 
    <div ng-repeat="qux in baz.qux" myvalue="{'item1':foo.var1, 'item2':qux.var2}">
        <div ng-click="myFirstFunction(myvalue)"></div>
        <div ng-click="mySecondFunction(myvalue)"></div>
    </div 
</div

我想要生成然后使用的对象相当大,我宁愿不为每个ngClick指令重复定义它。

我考虑将其保存到范围变量中,但对象将在ngRepeat的每次迭代中更改。

是否有指令或其他方式可用于存储此值以供日后使用?

4 个答案:

答案 0 :(得分:1)

为避免重复可能是长变量定义,可以使用https://github.com/minimagick/minimagick指令,每次创建相应的元素时都会执行其内容。

<div ng-repeat="bar in foo.bar> 
    <div
        ng-repeat="qux in baz.qux"
        ng-init="myValue = {'item1':foo.var1, 'item2':qux.var2 }"
    >
        <div ng-click="myFirstFunction(myValue)"></div>
        <div ng-click="mySecondFunction(myValue)"></div>
    </div>
</div>

但是,模板中的复杂代码很少是个好主意。根据文档的建议,考虑在控制器内移动逻辑:

  

ngInit的唯一合适用途是对ngRepeat的特殊属性进行别名,如下面的演示所示。除了这种情况,您应该使用ngInit而不是ngInit来初始化范围上的值。

答案 1 :(得分:0)

你可以在这里做一些天真的事情并且它会起作用:

<div ng-repeat="bar in foo.bar> 
    <div ng-repeat="qux in baz.qux">
        <div ng-click="myFirstFunction(foo, quz)"></div>
        <div ng-click="mySecondFunction(foo, quz)"></div>
    </div>
</div>

当您点击时,Angular会知道重复的范围。

答案 2 :(得分:-1)

您可以使用ng-storage将其存储在本地存储中。 https://github.com/gsklee/ngStorage

这将允许您存储它,然后在应用程序的任何位置使用它。

答案 3 :(得分:-1)

cookies,你也有ng-cookies https://docs.angularjs.org/api/ngCookies

试试吧!或者cookieStorage