之前我有类似的代码工作,出于某种原因,这一块不是。这是一个简单的想法;调用该函数,它调用基于app.factory('getSensors', ['data', function (data) {
return { get : function() {
data.get('sensors').then(function (results) {
var sensors = [];
for(var i = 0; i < results.sensors.length; i++) {
sensors.push({
'id' : Number(results.sensors[i][0]),
'name' : results.sensors[i][1],
'type' : results.sensors[i][2],
'device' : results.sensors[i][3],
'unit' : results.sensors[i][4],
'parent' : Number(results.sensors[i][5]),
'latitude' : Number(results.sensors[i][6]),
'longitude' : Number(results.sensors[i][7])
});
}
return sensors;
});
}
};
}]);
的工厂来获取数据并返回该数据的数组。首先是工厂:
data
使用以下app.factory('data', ['$http', function ($http) {
var serviceBase = '/api/';
var obj = {};
obj.get = function (q) {
return $http.get(serviceBase + q).then(function (results) {
return results.data;
});
};
return obj;
}]);
服务:
getSensors
对于工厂的电话,我已尝试过getSensors.get
,getSensors.get()
和for
,即使我知道其中一些是错误的。我也尝试过不在函数中包装这段代码,使用返回上面定义的函数,并在没有对象的情况下返回数组(它是如何在我的其他函数中工作的,即使我不认为这是最佳实践,它只是更简单)。我甚至将forEach
循环替换为getSensors
。
基本上,$http
工厂的返回值总是在我使用控制台调试完成{{1}}调用之前发生,即使代码在回调函数中并且在该循环之后。在花了2个小时查看并重写此代码之后,我不知道如何实现这一点。我可能只是遗漏了一些明显的东西,或者正在违反Angular的某些方面。
答案 0 :(得分:1)
您缺少的关键部分是<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/CCLL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#303e73"
android:orientation="vertical">
<LinearLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight=".5">
<ListView
android:isScrollContainer="false"
android:stackFromBottom="true"
android:background="#26315c"
android:id="@+id/messagesLV"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center_horizontal"
android:transcriptMode="alwaysScroll"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight=".6"
android:background="#303e73"
android:orientation="horizontal">
<ImageButton
android:layout_gravity="center"
android:id="@+id/addimgbtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="centerInside"
android:padding="15dp"
android:background="#303e73"
android:src="@mipmap/whiteadd" />
<EditText
android:id="@+id/messageET"
android:layout_weight=".5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:lines="5"
android:gravity="left"
android:textColor="#FFFFFF"
android:textColorHint="#FFFFFF"
android:inputType="textCapSentences|textMultiLine"
android:hint="Enter your Message...">
</EditText>
<ImageButton
android:layout_gravity="center"
android:id="@+id/sendbtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="centerInside"
android:padding="15dp"
android:background="#303e73"
android:src="@mipmap/whitesend" />
</LinearLayout>
return
方法中.then()
创建的承诺:
getSensors.get()
然后使用它,只需将app.factory('getSensors', ['data', function (data) {
return { get : function() {
return data.get('sensors').then(function (results) {
var sensors = [];
/* for loop (same as before) goes here */
return sensors;
});
}
};
}]);
服务作为依赖项注入,然后调用
getSensors