- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于一项作业,我们需要制作一个恒温器应用程序。我想在 ionic 中执行此操作,但现在正在努力使用提供的 API。我们提供了一个 API.js 文件,其中包含一组函数,用于与我们必须从中获取数据的服务器进行通信。我尝试通过提供商自己制作这些功能,但由于服务器返回 xml 数据,到目前为止我还没有成功。因此,我想通过将给定的 API.js 包含在我的项目中来使用它,但现在也很难做到这一点。因此,我想了解如何将此外部 API 包含到我的 ionic 项目中并使用现有的功能,或者如何使用返回的 xml 数据(在应用程序中显示它并将更改的数据发回)。
由于这两个文件都非常大,我在下面提供了一些片段,并在 Pastebin 链接中提供了完整文件。
我们可以使用的 get 和 put 命令是 day、time、currentTemperature、targetTemperature、dayTemperature、nightTemperature、weekProgramState 和 weekProgram。
提前非常感谢!!
var ServerUrl = '';
Type = {
Day : 'day',
Night : 'night'
};
Days = {
Monday : 'Monday',
Tuesday : 'Tuesday',
Wednesday : 'Wednesday',
Thursday : 'Thursday',
Friday : 'Friday',
Saturday : 'Saturday',
Sunday : 'Sunday'
};
var MinTemperature = parseFloat(5.0);
var MaxTemperature = parseFloat(30.0);
var MaxSwitches = 5;
var Time;
var CurrentDay;
var DayTemperature;
var NightTemperature;
var CurrentTemperature;
var TargetTemperature;
var ProgramState;
var Program = {};
Program[Days.Monday] = [];
Program[Days.Tuesday] = [];
Program[Days.Wednesday] = [];
Program[Days.Thursday] = [];
Program[Days.Friday] = [];
Program[Days.Saturday] = [];
Program[Days.Sunday] = [];
/* Retrive day program
*/
function getProgram(day) {
return Program[day];
}
/* Sorts the heating periods (the periods when the heating is on) and merges overlapping ones
*/
function sortMergeProgram(day) {
var program = getProgram(day);
program.sort(function(a, b){return parseTime(a[0])-parseTime(b[0])});
for (var i = 0; i < program.length - 1; i++) {
if (parseTime(program[i][1]) >= parseTime(program[i+1][0])) {
var start = (program[i][0]);
var end = (parseTime(program[i][1]) > parseTime(program[i+1][1])) ? program[i][1] : program[i+1][1];
program.splice(i, 2);
program.push([start, end]);
sortMergeProgram(day);
break;
}
}
}
/* Retrieves all data from the server except for weekProgram
*/
function get(attribute_name, xml_tag) {
return requestData(
"/"+attribute_name,
function(data) {
return $(data).find(xml_tag).text();
}
);
}
/* Retrieves the week program
*/
function getWeekProgram() {
return requestData(
'/weekProgram',
function(data) {
$(data).find('day').each(function() {
var day = $(this).attr('name');
Program[day] = [];
$(this).find('switch').each(function() {
if ($(this).attr('state') == 'on') {
if ($(this).attr('type') == Type.Day) {
getProgram(day).push([$(this).text(), '00:00']);
} else {
getProgram(day)[getProgram(day).length - 1][1] = $(this).text();
}
}
})
});
return Program;
}
);
}
返回的XML data
<thermostat><current_day>Thursday</current_day>
<time>23:32</time>
<current_temperature>16.0</current_temperature>
<target_temperature>16.0</target_temperature>
<day_temperature>22.0</day_temperature>
<night_temperature>19.0</night_temperature>
<week_program_state>off</week_program_state>
<week_program state="off">
<day name="Monday">
<switch type="day" state="off">00:00</switch>
<switch type="day" state="off">00:00</switch>
<switch type="day" state="off">00:00</switch>
<switch type="night" state="off">00:00</switch>
<switch type="night" state="off">00:00</switch>
<switch type="night" state="off">00:00</switch>
<switch type="day" state="on">05:00</switch>
<switch type="night" state="on">08:00</switch>
<switch type="day" state="on">12:00</switch>
<switch type="night" state="on">14:00</switch>
</day>
<day name="Tuesday">
<switch type="day" state="off">00:00</switch>
<switch type="day" state="off">00:00</switch>
<switch type="day" state="off">00:00</switch>
<switch type="day" state="off">00:00</switch>
<switch type="day" state="off">00:00</switch>
<switch type="night" state="off">00:00</switch>
<switch type="night" state="off">00:00</switch>
<switch type="night" state="off">00:00</switch>
<switch type="night" state="off">00:00</switch>
<switch type="night" state="off">00:00</switch>
</day>
最佳答案
我要做的是创建一个名为API.ts
的文件。在其中,我将创建一个包含 API.js
的属性和函数的 API 类,并更正 Typesctipt 语法。
看起来编写此文件的人也想使用 jquery
但它没有导入,所以我也导入了它。我想您已经获得了此文件,因此请确保将其放置在 src/assets 内并更正我的代码中的导入路径以获得匹配的文件名。
这就是我为您准备的内容:
import * as $ from '.assets/jquery.js';
export class API {
ServerUrl = '';
Type = {
Day: 'day',
Night: 'night'
};
Days = {
Monday: 'Monday',
Tuesday: 'Tuesday',
Wednesday: 'Wednesday',
Thursday: 'Thursday',
Friday: 'Friday',
Saturday: 'Saturday',
Sunday: 'Sunday'
};
MinTemperature = parseFloat('5.0');
MaxTemperature = parseFloat('30.0');
MaxSwitches = 5;
Time;
CurrentDay;
DayTemperature;
NightTemperature;
CurrentTemperature;
TargetTemperature;
ProgramState;
Program:any = {};
constructor() {
this.Program[this.Days.Monday] = [];
this.Program[this.Days.Tuesday] = [];
this.Program[this.Days.Wednesday] = [];
this.Program[this.Days.Thursday] = [];
this.Program[this.Days.Friday] = [];
this.Program[this.Days.Saturday] = [];
this.Program[this.Days.Sunday] = [];
}
/* Retrive day program
*/
getProgram(day) {
return this.Program[day];
}
/* Sorts the heating periods (the periods when the heating is on) and merges overlapping ones
*/
sortMergeProgram(day) {
let program = this.getProgram(day);
program.sort(function(a, b) {
return this.parseTime(a[0]) - this.parseTime(b[0])
});
for (let i = 0; i < program.length - 1; i++) {
if (this.parseTime(program[i][1]) >= this.parseTime(program[i + 1][0])) {
let start = (program[i][0]);
let end = (this.parseTime(program[i][1]) > this.parseTime(program[i + 1][1])) ? program[i][1] : program[i + 1][1];
program.splice(i, 2);
program.push([start, end]);
this.sortMergeProgram(day);
break;
}
}
}
/* Retrieves all data from the server except for weekProgram
*/
get(attribute_name, xml_tag) {
return this.requestData(
"/" + attribute_name,
function(data) {
return $(data).find(xml_tag).text();
}
);
}
/* Retrieves the week program
*/
getWeekProgram() {
return this.requestData(
'/weekProgram',
function(data) {
$(data).find('day').each(function() {
let day = (<any>$(this)).attr('name');
this.Program[day] = [];
$(this).find('switch').each(function() {
if ((<any>$(this)).attr('state') == 'on') {
if ((<any>$(this)).attr('type') == this.Type.Day) {
this.getProgram(day).push([$(this).text(), '00:00']);
} else {
this.getProgram(day)[this.getProgram(day).length - 1][1] = $(this).text();
}
}
})
});
return this.Program;
}
);
}
/* Uploads all data to the server except for currentTemperature and weekProgram
*/
put(attribute_name, xml_tag, value) {
this.uploadData("/" + attribute_name, "<" + xml_tag + ">" + value + "</" + xml_tag + ">");
}
requestData(address, func) {
let result;
(<any>$).ajax({
type: "get",
url: this.ServerUrl + address,
dataType: "xml",
async: false,
success: function(data) {
result = func(data);
}
});
return result;
}
/* Uploads the week program
*/
setWeekProgram() {
let doc = document.implementation.createDocument(null, null, null);
let program = doc.createElement('week_program');
program.setAttribute('state', this.ProgramState ? 'on' : 'off');
for (let key in this.Program) {
let day = doc.createElement('day');
day.setAttribute('name', key);
let daySwitches = [];
let nightSwitches = [];
let i, text, sw;
let periods = this.getProgram(key);
for (i = 0; i < periods.length; i++) {
daySwitches.push(periods[i][0]);
nightSwitches.push(periods[i][1]);
}
for (i = 0; i < this.MaxSwitches; i++) {
sw = doc.createElement('switch');
sw.setAttribute('type', this.Type.Day);
if (i < daySwitches.length) {
sw.setAttribute('state', 'on');
text = doc.createTextNode(daySwitches[i]);
} else {
sw.setAttribute('state', 'off');
text = doc.createTextNode('00:00');
}
sw.appendChild(text);
day.appendChild(sw);
}
for (i = 0; i < this.MaxSwitches; i++) {
sw = doc.createElement('switch');
sw.setAttribute('type', this.Type.Night);
if (i < nightSwitches.length) {
sw.setAttribute('state', 'on');
text = doc.createTextNode(nightSwitches[i]);
} else {
sw.setAttribute('state', 'off');
text = doc.createTextNode('00:00');
}
sw.appendChild(text);
day.appendChild(sw);
}
program.appendChild(day);
}
doc.appendChild(program);
this.uploadData('/weekProgram', (new XMLSerializer()).serializeToString(doc));
}
/* Creates the default week program
*/
setDefault() {
let doc = document.implementation.createDocument(null, null, null);
let program = doc.createElement('week_program');
program.setAttribute('state', this.ProgramState ? 'on' : 'off');
for (let key in this.Program) {
let day = doc.createElement('day');
day.setAttribute('name', key);
let daySwitches = [];
let nightSwitches = [];
let i, text, sw;
for (i = 0; i < this.MaxSwitches; i++) {
sw = doc.createElement('switch');
sw.setAttribute('type', this.Type.Night);
sw.setAttribute('state', 'off');
text = doc.createTextNode('00:00');
sw.appendChild(text);
day.appendChild(sw);
}
for (i = 0; i < this.MaxSwitches; i++) {
sw = doc.createElement('switch');
sw.setAttribute('type', this.Type.Day);
sw.setAttribute('state', 'off');
text = doc.createTextNode('00:00');
sw.appendChild(text);
day.appendChild(sw);
}
program.appendChild(day);
}
doc.appendChild(program);
this.uploadData('/weekProgram', (new XMLSerializer()).serializeToString(doc));
}
uploadData(address, xml) {
(<any>$).ajax({
type: "put",
url: this.ServerUrl + address,
contentType: 'application/xml',
data: xml,
async: false
});
}
parseTime(t) {
return parseFloat(t.substr(0, 2)) + parseFloat(t.substr(3, 2)) / 60;
}
/* Adds a heating period for a specific day
*/
addPeriod(day, start, end) {
let program = this.getWeekProgram()[day];
program.push([start, end]);
this.sortMergeProgram(day);
this.setWeekProgram();
}
/* Removes a heating period from a specific day.
idx is the idex of the period with values from 0 to 4
*/
removePeriod(day, idx) {
let program = this.getWeekProgram()[day];
let start = program[idx][0];
let end = program[idx][1];
program.splice(idx, 1);
this.setWeekProgram();
}
/* Checks whether the temperature is within the range [5.0,30.0]
*/
inTemperatureBoundaries(temp) {
temp = parseFloat(temp);
return (temp >= this.MinTemperature && temp <= this.MaxTemperature);
}
}
现在,在您想要使用 API 的任何 ionic 组件中,只需像这样导入它即可:
import { API } from './API'
然后在您的代码中像这样使用它:
export class yourPage {
constructor(public api: API){}
yourFunction() {
this.api.setDefault();
}
}
关于javascript - 如何将外部 javascript 库添加到 ionic 3 typescript 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44423986/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!