我是棱角分明的新手js一般来说,并遵循Dan Wahlin的一个很棒的教程,它展示了如何将角客户端连接到REST接口。
我正在调用REST接口来获取大量数据,然后使用客户端对数据,计算等做有用的事情。
我无法弄清楚如何从控制器内的REST工厂中干净地操作数据。
在我的MainController.js中,我可以获取订单数据并将其声明为范围项:
app.controller('MainController', ['$scope', 'dataFactory', function($scope, dataFactory) {
$scope.orders;
getOrders();
function getOrders() {
dataFactory.getOrders()
.success(function (ord) {
$scope.orders = ord;
})
.error(function (error) {
$scope.status = 'Unable to load order data: ' + error.message;
});
}
}
现在我想使用返回的$ scope.orders数组中的数据在控制器内部进行操作。当我试图找到这样的长度时,它起作用:
function getOrders() {
dataFactory.getOrders()
.success(function (ord) {
$scope.orders = ord;
// This is me using the $scope.orders data to declare another controller item
$scope.ordersCount = $scope.orders.length;
})
.error(function (error) {
$scope.status = 'Unable to load order data: ' + error.message;
});
}
但是,我需要使用$ scope.orders变量中的数据以不同的方式添加大量不同的项目。我可以像上面的$ scope.ordersCount项一样在函数内部完成所有操作,但代码看起来很乱,如果我在这里添加不同类型的计算,函数会变得更长并且看起来不对。但是,当我尝试访问函数外部的$ scope.orders数组时,它不起作用。这是我试过的:
$scope.orders = getOrders();
function getOrders() {
dataFactory.getOrders()
.success(function (ord) {
$scope.orders = ord;
// I also tried 'return ord' here too
})
.error(function (error) {
$scope.status = 'Unable to load order data: ' + error.message;
});
}
$scope.ordersCount = $scope.orders.length;
我做错了什么?如何将我的数组声明为$ scope.orders,然后在函数外使用它?
目前控制台只是给我“无法读取未定义的属性长度”,这告诉我我的$ scope.orders在函数外部不可用。
答案 0 :(得分:2)
在上面的代码示例中,您的其他服务需要一些时间来获取数据并与$ scope.orders绑定,然后您的代码行$ scope.ordersCount = $ scope.orders.length;执行,因为你在控制台中得到未定义的错误。
试试这个:
$scope.orders = getOrders();
function getOrders() {
dataFactory.getOrders()
.success(function (ord) {
$scope.orders = ord;
// I also tried 'return ord' here too
})
.error(function (error) {
$scope.status = 'Unable to load order data: ' + error.message;
});
$scope.ordersCount = $scope.orders.length; // Just putting this line inside rest function
console.log($scope.ordersCount)
}
答案 1 :(得分:1)
您应该更改
dataFactory.getOrders()
.success(function (ord) {
$scope.orders = ord;
// I also tried 'return ord' here too
})
通过ajax加载后,如下所示。
$scope.$watch('orders', function() {
// called when $scope.orders changes.
$scope.ordersCount = $scope.orders.length;
}, true);
因此,角度1的最佳方法是在控制器内使用$ watch。
SELECT Data_Type INTO TargetFieldType FROM information_schema.COLUMNS
WHERE information_schema.COLUMNS.COLUMN_NAME= TargetFieldName
AND information_schema.COLUMNS.TABLE_NAME=TableName
AND information_schema.COLUMNS.TABLE_SCHEMA='WMC';
IF (( FIND_IN_SET(@TargetFieldType ,'VARCHAR')= TRUE )
OR (FIND_IN_SET(TargetFieldType,'TEXT')= TRUE )
OR (FIND_IN_SET(TargetFieldType,'LONTTEXT')= TRUE)
OR (FIND_IN_SET(TargetFieldType,'CHAR')= TRUE) ) THEN
SET TargetFieldValue = '''' + TargetFieldValue +'''';
END IF ;
参考here
希望这有帮助!