javascript – AngularJS – 从Angular外部触发摘要的最佳方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – AngularJS – 从Angular外部触发摘要的最佳方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2364字,纯文字阅读大概需要4分钟。
内容图文
![javascript – AngularJS – 从Angular外部触发摘要的最佳方法](/upload/InfoBanner/zyjiaocheng/761/69f17955e47d4e178a6e741e30086410.jpg)
我不太确定标题是最好的描述,但我想知道如果我在Angular摘要循环之外发生了一些事件,触发摘要循环,最好的方法是什么?在我正在处理的应用程序中,我正在使用Socket.io来从网络中的其他应用程序来回传递数据. Socket.io中有一些事件可用于更新当前Controllers $范围内的模型.在发生摘要循环之前,这些更改不会反映在UI中.我不希望调用$scope.$apply()以防止遇到Angular已经处于循环中的问题.
我知道我可以使用$timeout()并将我的函数放在那里并将超时设置为0秒.这就是我目前使用的,它工作正常,但我想知道这是否是最好的方法?
示例JS
var app = angular.module('MyApp',[]);
var socket = io.connect('http://localhost:3000');
app.controller('MyAppController',['$scope',function($scope) {
$scope.connections = 0;
socket.on('connect',function(sock) {
sock.on('event',function() {
$scope.connections++;
};
};
}]);
示例HTML
<!DOCTYPE html>
<html lang="en" ng-app="MyApp">
<head></head>
<body ng-controller="MyAppController">
<p>Connections: {{connections}}</p>
<script src="angular.min.js"></script>
</body>
</html>
显然,这是一个非常简单的,尽可能基本的例子.它不是正在使用的ACTUAL代码,但代表了同样的问题.当从socket.io引发事件时,$scope.connections变量会递增但是UI不反映更改,直到其他东西触发摘要循环,$scope.$apply()被调用,或者我使用$timeout ().
再一次,我有适用的代码,只是想知道最好的方法是什么.
谢谢
解决方法:
每当您知道自己不在摘要循环中时,调用$scope.$apply()或$scope.digest()始终是安全的(并且是最佳实践).你怎么知道的?任何不通过Angular API完成的异步调用.这是角度在内部处理这些情况的方式(查看ngEvent指令的代码).
仅当您不确定正在运行的代码是否在“内部”角度时才使用$timeout.这应该是非常非常罕见的.我只需要这一次,我仍然不是很高兴…
var app = angular.module('MyApp',[]);
var socket = io.connect('http://localhost:3000');
app.controller('MyAppController',['$scope',function($scope) {
$scope.connections = 0;
socket.on('connect',function(sock) {
sock.on('event',function() {
//wraps your code in a try catch that is handled by angular's error service. Calls $rootScope.$digest()
$scope.$apply(function() {
$scope.connections++;
});
//OR - errors in your code will not be handled by angular
//also calls $rootScope.$digest()
$scope.connections++;
$scope.$apply();
//OR - errors in your code will not be handled by angular
//Only processes watchers for $scope and it's children
//Fastest, but may have unintended consequences.
$scope.connections++;
$scope.$digest();
};
};
}]);
我更喜欢第一个选项,因为它使你的代码“内部有角度”.但是,这三个都有效.
内容总结
以上是互联网集市为您收集整理的javascript – AngularJS – 从Angular外部触发摘要的最佳方法全部内容,希望文章能够帮你解决javascript – AngularJS – 从Angular外部触发摘要的最佳方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。