AngularJS - TypeError: v2.[xxxx] 不是函数

Posted

技术标签:

【中文标题】AngularJS - TypeError: v2.[xxxx] 不是函数【英文标题】:AngularJS - TypeError: v2.[xxxx] is not a function 【发布时间】:2017-05-17 01:53:59 【问题描述】:

我正在尝试使用 ng-style 根据其数组索引有条件地设置 div 元素的背景位置。每个 div 都是使用 ng repeat 生成的。

在我的html页面中,我有以下代码sn-p:

    <div style="position:absolute; z-index:1; width:100px; height:100px" ng-style="navigationStyleToilet(o)" ng-repeat="o in arr"></div>

在我的 controller.js 中,我有以下代码 sn-p:

  $scope.navigationStyleToilet = [];
  $scope.arr = [];
  // get data from service.js
  var categoryInfo = NavigationService.fnGetCategoryInfo(strCategoryName);

   for (i = 0; i < categoryInfo.length; i++)
    
        $scope.arr.push(i);
        var targetImageX = categoryInfo[i].X;
        var targetImageY = categoryInfo[i].Y;
        $scope.navigationStyleToilet[i] = 
          "background-position": targetImageX + " " + targetImageY
        
    

不幸的是,它给了我“TypeError: v2.navigationStyleToilet is not a function”的错误信息。

我尝试了几种不同的方法,但是我不能使用 ng-style 根据它们的数组索引有条件地设置 div 元素的背景位置。有谁知道我可以使这项工作的方法吗?谢谢。

【问题讨论】:

$scope.navigationStyleToilet 中有值吗? 价值观?基本上,$scope.navigationStyleToilet 是一个 div 的 ng 样式。将重复生成 div,我想根据其数组索引有条件地为每个 div 设置不同的背景位置。顺便说一句,我已经更新了我的问题,因为我忘了提到我已经声明并实例化了 $scope.navigationStyleToilet = []; 以下答案是根据更新后的问题!!! 【参考方案1】:

如果你想从数组中获取元素,你应该在数组中使用索引器。所以,你的 ng 风格的索引器应该是

ng-style="navigationStyleToilet[o]"

您的代码ng-style="navigationStyleToilet(o)" 会将其假定为函数并以这种方式调用。因此,您应该使用索引器而不是调用该函数。 确保,o 应该索引值以从数组中获取数据。

如果你想获得 ng-repeat 产生的索引,你可以使用 $index。所以,你的代码可能是这样的:

ng-style="navigationStyleToilet[$index]"

【讨论】:

【参考方案2】:

首先,您不需要单独的函数。

您可以将 ng-repeat 放在 categoryInfo 上,方法是将其更改为:

$scope.categoryInfo

 <div style="position:absolute; z-index:1; width:100px; height:100px" ng-style="'background-position': o.X + 'px ' + o.Y +'px' " ng-repeat="o in categoryInfo">o</div>

在这里解决: https://plnkr.co/edit/Nh0Kp0zI77JIxcApTYSQ?p=preview

您可能在值中缺少 px 或 %,因为它们在 'background-position' 属性中是必需的

但正如您在上面 plunkr 中看到的(通过检查元素),两个 div 都有“背景位置”,那么它们也是重叠的:

所以你可能正在寻找这样的东西:

ng-style="'left': o.X + 'px ', 'top': o.Y +'px' " ng-repeat="o in categoryInfo"

请看这里:https://plnkr.co/edit/g0h7IsG1kSkNQmSLBDWY?p=preview

希望这会有所帮助。 :)

【讨论】:

以上是关于AngularJS - TypeError: v2.[xxxx] 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:dbg在angularjs中未定义

angularJS + mongoose:TypeError:无法读取未定义的属性“模型”

Angularjs - TypeError:路径必须是绝对路径或指定根到 res.sendFile

AngularJS指令元素方法绑定-TypeError:无法使用'in'运算符在1中搜索'functionName'

未捕获(承诺):TypeError:无法读取未定义的属性“创建”(离子 3.9,Angularjs 5.0.3)

angularJs TypeError:将循环结构转换为JSON