当与地图一起使用时,AngularJS ng-show不会触发

时间:2015-08-07 11:48:07

标签: javascript jquery angularjs

尝试使用键/值映射来确定是否应显示角度控制元素:

http://jsfiddle.net/9fR23/181/

但我收到一个例外:

angular.js:6173 TypeError: fnPtr is not a function
    at Object.elementFns [as get] (angular.js:6802)
    at Object.$get.Scope.$digest (angular.js:8563)
    at Object.$get.Scope.$apply (angular.js:8771)
    at angular.js:986
    at Object.invoke (angular.js:2873)

以这种方式使用范围并非违法吗?如何使用键/值映射来确定是否应显示元素?此映射将在运行时更新,因此要确保此更新反映在UI上,我需要包含apply()方法吗?

小提琴代码:

<div ng-app="myapp" ng-controller="FirstCtrl">
    <table class="table table-striped">
        <tr ng-repeat="person in people">
            <td ng-show="errorMap('1')">{{ person.first + ' ' + person.last }}</td>
        </tr>
    </table>
</div>

var myapp = angular.module('myapp', []);
myapp.controller('FirstCtrl', function ($scope) {
     var errorMap = new Object()

     errorMap['1'] = 'true'
     errorMap['2'] = 'false';
$scope.errorMap = errorMap

    $scope.people = [
        { id: 1, first: 'John', last: 'Rambo' },
        { id: 2, first: 'Rocky', last: 'Balboa' },
        { id: 3, first: 'John', last: 'Kimble' },
        { id: 4, first: 'Ben', last: 'Richards' }
    ];
});

2 个答案:

答案 0 :(得分:1)

errorMap('1')不是一个函数,它是一个对象。所以你可以这样做:

ng-show="errorMap['1']"

答案 1 :(得分:0)

您正在尝试在范围内调用名为errorMap的方法。 使用方括号来访问它。

<div ng-app="myapp" ng-controller="FirstCtrl">
    <table class="table table-striped">
        <tr ng-repeat="person in people">
            <td ng-show="errorMap['1']">{{ person.first + ' ' + person.last }}</td>
        </tr>
    </table>
</div>