在PHP中,我可以使用双美元符号来使用变量来表示另一个变量。如果喜欢在AngularJS表达式中做同样的事情。
例如,如果我有一个property1
,property2
等对象,每个对象都有不同的值,我会直接将它们引用为{{$scope.property1}}
我想做的是string propertyToDisplay = 'property1'
,然后使用{{$scope.propertyToDisplay}}
显示property1
中存储的值。
AngularJS是否支持此功能?
答案 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]">
希望这至少与你想要的一致。