如何在AngularJS中使用变量表达式

时间:2014-12-25 19:01:54

标签: angularjs angularjs-scope

在PHP中,我可以使用双美元符号来使用变量来表示另一个变量。如果喜欢在AngularJS表达式中做同样的事情。

例如,如果我有一个property1property2等对象,每个对象都有不同的值,我会直接将它们引用为{{$scope.property1}}

我想做的是string propertyToDisplay = 'property1',然后使用{{$scope.propertyToDisplay}}显示property1中存储的值。

AngularJS是否支持此功能?

3 个答案:

答案 0 :(得分:1)

这似乎是XY problem。通常,$scope变量根本不应出现在您的视图中,更不用说您似乎试图超出应该放入AngularJS视图标记的边界。

通常,控制器中应出现在视图中的部分是(1)作用域的属性(或属性的属性等)。(2)作为作用域一部分的函数(传入作用域属性)作为论点)。对于涉及动态功能的任何事情,您通常应该使用后者。所以你可以让你的控制器定义如下:

angular.module('myModule', [])
.controller('myController', ['$scope', function ($scope) {
    $scope.properties = {
        property1: "Hey!",
        property2: "Hi"
    };

    $scope.selectedProperty = '';

    $scope.getProperty = function (propertyName) {
        return $scope.properties[propertyName];
    };
}]);

然后你的观点会有这样的结果:

<select ng-model="selectedProperty">
   <option value="property1">Property 1</option>
   <option value="property2">Property 2</option>
</select>
<p>The value of the property you selected is: {{getProperty(selectedProperty)}}</p>

答案 1 :(得分:0)

您可以使用方括号访问变量对象属性:

attrname ='attribute_name';

obj[attrname] = something;

答案 2 :(得分:0)

如何使用另一个对象存储每个对象属性的可见性(DEMO)。

$scope.visible = {};

$scope.person = {
    first_name: 'John',
    last_name: 'Rambo',
    city: 'Hollywood'
};

为每个属性创建一个包含复选框的列表:

<div ng-repeat="(key, value) in person">
  <input id="{{key}}Check" type="checkbox" ng-model="visible[key]">
  <label for="{{key}}Check">{{key}}</label>
</div>

并检查表单中每个属性的可见性:

<input type="text" ng-model="person.first_name" ng-show="visible['first_name']">

如果您希望表单也是动态的(在这种情况下只输入字段),您当然可以将其置于ng-repeat中:

<input ng-repeat="(key, value) in person" type="text" ng-model="person[key]" ng-show="visible[key]">

希望这至少与你想要的一致。