ng-class with Evaluated Expression not working with class name passed as variable

ng-class with Evaluated Expression not working with class name passed as variable

这是我的html

    <div ng-class="getClasses()"> </div>

getClasses() 方法在此处输入代码,在控制器中定义为

    $scope.getClasses = function () {

   //another function call to get class name

   //To make short what ever the function returns it stores to variable 
     className i.e. 

    var className = 'proSpacerOne';

   //Similarly let

    var alternateClass = 'proSpacerOneA';


    return { className: false, alternateClass: true};
}

如我所料,'proSpacerOneA' class 应应用于 但它应用 class 名称 'alternateClass'.

但是,如果 return 硬编码的 class 名称工作正常。

  return { 'proSpacerOne': false, 'proSpacerOneA': true};

如果我将 class 名称作为变量传递有什么问题?

您需要使用括号表示法:

var className = 'proSpacerOne';
var alternateClass = 'proSpacerOneA';
var obj = {}
obj[className] = false;
obj[alternateClass] = true;

return obj;

或ES6对象初始化器(http://www.ecma-international.org/ecma-262/6.0/#sec-object-initializer):

return { [className] : false, [alternateClass] : true }

要将变量用作对象键,您必须使用[] 语法。

变化:

return { className: false, alternateClass: true};

var returnObj = {};
returnObj[className] = false;
returnObj[alternateClass] = true;
return returnObj;

当 angular 尝试渲染时

  ng-class="getClasses()"

表达, 如果值不是 hoist false,它会用返回的对象键填充 class 属性。

所以如果你 return

{ className: false, alternateClass: true};

您的函数 angular 将呈现 class html 这样的标签

class="alternateClass"

您应该使用不同的逻辑将 class 名称传递给 ng-class 表达式。 附上有价值的教程 here