angular里的$setTimeout和原生的setTimeout有啥区别么

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了angular里的$setTimeout和原生的setTimeout有啥区别么相关的知识,希望对你有一定的参考价值。

参考技术A

首先,angular没有 $setTimeout,是 $timeout。


简单来说$timeout 就是是对 window.setTimeout 的一层封装,功能和接口基本一样,主要的区别有以下三点:

    $timeout(fn, [delay], [invokeApply])传入的第一个参数fn ( function )被包装在 try...catch 结构内,并且把抛出的异常委托给 $exceptionHandler 做统一调度处理;

    $timeout 返回的不是数字 ID,而是一个 promise 对象。这无法用 window.clearTimeout 取消它,而是要用 $timeout.cancel(returnedPromise) 来取消定时;

    传入的第三个参数invokeApply是一个布尔值,如果传入 false,则不会使用 $apply 来包装 function 调用,也就是说不会更新当前作用域内的数据绑定。默认是 true。

参考技术B $timeout 是对 window.setTimeout 的一层封装,功能和接口基本一样,主要的区别有以下三点:
1.传入的 function 被包装在 try...catch 结构内,并且把抛出的异常委托给 $exceptionHandler 做统一调度处理;
2.$timeout 返回的不是数字 ID,而是一个 promise 对象。这意味着你无法用 window.clearTimeout 取消它,而是要用 $timeout.cancel(returnedPromise) 来取消;
3.传入的第三个参数是一个布尔值,如果传入 false,则不会使用 $apply 来包装 function 调用,也就是说不会更新当前作用域内的数据绑定。默认是 true。
最后,其实这些东西都在文档里……

原生 ios phonegap/cordova 的 Angular $templateCache 和 $stateProvider 修复

【中文标题】原生 ios phonegap/cordova 的 Angular $templateCache 和 $stateProvider 修复【英文标题】:Angular $templateCache and $stateProvider fix for native ios phonegap/cordova 【发布时间】:2016-02-19 15:28:38 【问题描述】:

Angular $templateCache、$stateProvider 和 ng-include 在 Web 浏览器中运行良好,但在使用 phonegap/cordova 的原生 ios 上,它不会加载模板或进入状态

我已经检查了清单:

删除<base href="/"> 确保路径是相对的“template.html” 与“/template.html” 确保 html5Mode 为 false 在 Angular 之前加载 templates.js 确保依赖注入到位

以下是一些在浏览器中有效但在本机 ios 上无效的示例。

$stateProvider.state('start', 
    url: '',
    templateUrl: 'templates/start/start.html'
);

$state.go('start');

<div ng-include=" 'fileFromTemplatecache.html' "></div>

有什么想法吗?我找不到有效的解决方案。

【问题讨论】:

它应该可以正常工作,要么是你的路径有问题,要么是你的项目设置有问题。也许您的项目文件夹结构的屏幕截图会有所帮助 谢谢,@FranePoljak - 这是一个配置问题。我在下面添加了我的解决方案。 对于 iOS,您可以在 Safari -> Developer -> 选择设备/模拟器(您的应用运行的位置)-> Index.html 中检查错误,希望这有助于您更轻松地调试错误下次 【参考方案1】:

我敢肯定,其他人会遇到这个问题。该解决方案与移动构建根目录中的 config.xml 文件有关。这对我有用...

<allow-navigation href="file://*/*"/>
<allow-navigation href="*"/>
<allow-intent href="file://*/*"/>
<allow-intent href="*"/>
<access origin="file://*/*"/>
<access origin="*"/>

【讨论】:

以上是关于angular里的$setTimeout和原生的setTimeout有啥区别么的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 的setTimeout 和Angular中的$timeout的區別

js 里的 settimeout函数

Angular中setTimeout的目的是啥?

测试使用 setInterval 或 setTimeout 的 Angular2 组件

原生js应用setTimeout实现下拉菜单

怎么调用webservice接口里的方法