如何在角度JS中动态创建$ scope变量和函数

时间:2015-06-12 14:22:56

标签: angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

我尝试动态创建$ scope变量和函数,并调用ng-click指令。

我的场景是动态调用ng-repeat& amp; NG-点击。

Json
{
  "listnames": [
{ name: rock, age: 24, year: 1999},
{ name: rock1, age: 24, year: 1999},
{ name: rock2, age: 24, year: 1999},
{ name: rock3, age: 24, year: 1999}
]
}  

在view.html文件中

<td ng-repeat="list in listnames.name track by $index" class="smallbox_{{$index}}" ng-class="{'showblock': isbox_{{$index}}, 'hideBlock': !isbox_{{$index}}}" ng-click="isshowhide{{$index}}_new()" >

即表示

<td ng-repeat="list in listnames.name track by $index" class="smallbox_0" ng-class="{'showblock': isbox_0, 'hideBlock': !isbox_0}" ng-click="isshowhide0_new()" >

<td ng-repeat="list in listnames.name track by $index" class="smallbox_1" ng-class="{'showblock': isbox_1, 'hideBlock': !isbox_1}" ng-click="isshowhide1_new()" >

所以..在......

在Controller.js文件中

$scope.isshowhide0_new = function(){
        $scope.isbox_0 = !$scope.isbox_0;
}
$scope.isshowhide1_new = function(){
        $scope.isbox_1 = !$scope.isbox_1;
}

但是,我需要创建动态调用函数和$ scope变量的解决方案。

类似于......

for(var i=0; i< 288; i++){

$scope.isshowhide[i]_new = function(){
        $scope.isbox_[i] = !$scope.isbox_[i];
}

OR

$scope.isshowhide{{i}}_new = function(){
        $scope.isbox_{{i}} = !$scope.isbox_{{i}};
}

Angular JS中是否有可能使用此类型的解决方案。

所以,我可以称之为动态功能&amp;使用$ index作为

的$ scope变量

纳克单击=&#34; isshowhide0_new();&#34;
纳克单击=&#34; isshowhide1_new();&#34;
纳克单击=&#34; isshowhide2_new();&#34;
纳克单击=&#34; isshowhide3_new();&#34; ...

OR

ng-class =&#34; {&#39; showblock&#39;:isbox_0,&#39; hideBlock&#39;:!isbox_0}&#34;
ng-class =&#34; {&#39; showblock&#39;:isbox_1,&#39; hideBlock&#39;:!isbox_1}&#34;
ng-class =&#34; {&#39; showblock&#39;:isbox_2,&#39; hideBlock&#39;:!isbox_2}&#34;

我希望你明白我到底需要什么......

所以,请某人,你能给我解决方案并实现这种类型的功能。

我有一些代码实现用于测试目的。 http://jsfiddle.net/twc7Lbe3/

请修改此代码并告知我们。如果可能,也提供解决方案。

http://jsfiddle.net/twc7Lbe3/

2 个答案:

答案 0 :(得分:3)

你知道在javascript中:

obj.property === obj["property"]

所以如果你真的想,你可以:

<td ng-repeat="list in listnames.name track by $index" class="smallbox_{{$index}}" ng-class="{'showblock': isbox_{{$index}}, 'hideBlock': !isbox_{{$index}}}" ng-click="isshowhide_new($index)" >

然后:

$scope.isshowhide_new = function(i){
        $scope['isbox_' + i ] = !$scope['isbox_' + i ];
}

答案 1 :(得分:1)

一种解决方案是使用数组来控制显示/隐藏块类:

<td ng-repeat="..." ng-click="isbox[$index]=!isbox[$index]" ng-class="{'showblock': isbox[$index], 'hideBlock': !isbox[$index]}"></td>

在控制器中用布尔值填充你的isbox数组:

$scope.isbox = [];
for(var i=0; i< 288; i++){ // In case you want to initialize all values as false
    $scope.isbox[i] = false;
}

不确定这是否是您正在寻找的内容,但此处您已更新fiddle