在ng-repeat

时间:2017-07-18 14:13:45

标签: javascript angularjs

我有一个包含多个属性的指令。其中一个属性用于将数组值绑定到指令。我在console.log(scope)函数中link并查看其属性,但未定义。它具有属性countObj:undefined

该数组基本上包含:countArray= [0,1..]

我想将值0传递给directive1,将1传递给directive2等。如果创建了新指令,则数组中的值将增加到下一个数字(如果最后一个值为1则为2)。当我想要一个新指令时,我正在使用ng-repeat来显示指令和递增数组(0,1,2 ..)。我想将相应的数组值传递给每个指令。

首先,我默认使用$ scope.countArray = [0],因此ng-repeat有一个值,默认情况下会显示一个指令。所以至少第一个指令的console.log(scope.countObj)应该包含一个值,而不是undefined

这是使用指令的html:

 <month-dir  ng-repeat="count in countArray" countObj="countArray[count]" on-cl="removeDirCtrl(removeVal)" obj="ebObj.costArray[count]">
            <ng-transclude></ng-transclude>
</month-dir>

上面的属性countObj应该包含值,但在console.log(scope.countObj)

时未定义

这是指令:

    ebApp.directive('monthDir', function () {
    return {
        restrict: 'E',
        templateUrl: 'htmlFiles/monthDirective.html',
        transclude: true,
        scope: {
            ebObj: "=obj",
            onCl: "&",
            countObj: "=" //this is undefined
        },
        link: function (scope, element, attrs) {

            scope.change = function (changedUnit) {
                changedUnit.totalCost = 0;
                //console.log(changedUnit);
                changedUnit.totalCost = changedUnit.unitsConsumed * 50;
                console.log(scope);
                console.log(scope.$eval(attrs.model));
            }
            scope.removeDir = function (removeVal) { 
                console.log(removeVal); 
                scope.onCl({ removeVal: attrs.model }); 
            }

        },
        controller: function ($scope) {
            //console.log($scope);
        }
    }
})

在控制器中我有$scope.countArray = [0];这样,当页面加载时至少有一个指令。当我想要新的指令时,我这样做:

$scope.addDirective = function () {
    $scope.countArray.push($scope.countArray.length);

}

新值应该传递给ng-repeat中指令的范围。但它不会起作用。我得到了未定义的

1 个答案:

答案 0 :(得分:0)

您需要在html中使用count-obj作为attr,而不是countObj。您不需要使用数组索引count-obj="countArray[count]",只需使用count-obj="count"