遍历由字符串定义的$ scope

时间:2016-09-28 22:33:45

标签: javascript angularjs

我有一个字符串作为属性传递(“Calendar.Scheduling.field.Appointment.ApptDateTime_Date”),它定义了$ scope中变量的位置。是否有更好的方法来获取范围中值的位置,而不是循环遍历子对象。我希望有一个可以使用的xpath类型声明

$ scope布局如下:

$scope : {
    	Calendar: {
    		Office: {
    			Name: "Dr. Suess",
    			Address: "1234 Main St.",
    			City: "Whoville"
    		},
    		Scheduling: {
    			LastName: "Doe",
    			FirstName: "Jane",
    			Appointment: {	
    				"CallDateTime_Date" : "08/05/2016",
    				"CallDateTime_Time" : "10:24 AM",
    				"ApptDateTime_Date" : "10/12/2016",
    				"ApptDateTime_Time" : "06:00 AM"
    			}
    		}
    	}
    };

我可以进入$ scope。 Calendar.Scheduling.field.Appointment.ApptDateTime_Date,无需遍历子项[s]。

var dateRef = "Calendar.Scheduling.field.Appointment.ApptDateTime_Date";
tempString = tempString.replace(/\./g, '","');
var ar = JSON.parse('["' + tempString + '"]');

var currentRef = $scope;
ar.forEach(function (entry) {
    currentRef = currentRef[entry];
});

currentRef = new Date($scope.apptDate);

2 个答案:

答案 0 :(得分:2)

我的建议是使用lodash。 Lodash是一个非常方便的库,具有许多有用的实用程序功能。它提供的两个功能是getset。有了这些,你可以这样做:

var dateRef = "Calendar.Scheduling.field.Appointment.ApptDateTime_Date";
var date = _.get($scope, dateRef);  //get value

var newDate = new Date();
_.set($scope, dateRef, newValue);  //set value

答案 1 :(得分:0)

而不是每次都像这样访问Appointment对象的ApptDateTime_Date属性

var dateRef = "Calendar.Scheduling.field.Appointment.ApptDateTime_Date";

您可以在代码中的一个位置设置以下代码

var appointment = $scope.Calendar.Scheduling.field.Appointment;

上面的代码保存了Appointment变量

appointment对象的引用

然后每次传递时都可以形成dataRef作为参数

var dateRef = \"+ appointment + ".ApptDateTime_Date" +\";