在这篇文章中,我们将带领您了解改进此AngularJS工厂以与socket.io一起使用的全貌,同时,我们还将为您介绍有关AngularJS不适用于IE9,但可以与其他浏览器一起使用、angularj
在这篇文章中,我们将带领您了解改进此AngularJS工厂以与socket.io一起使用的全貌,同时,我们还将为您介绍有关Angular JS不适用于IE9,但可以与其他浏览器一起使用、angularjs – Angular 2 app中的socket.io-client、angularjs – Angular translate指令不与ngMessage一起使用、angularjs – Angular UI:下拉列表不能与datepicker一起使用的知识,以帮助您更好地理解这个主题。
本文目录一览:- 改进此AngularJS工厂以与socket.io一起使用
- Angular JS不适用于IE9,但可以与其他浏览器一起使用
- angularjs – Angular 2 app中的socket.io-client
- angularjs – Angular translate指令不与ngMessage一起使用
- angularjs – Angular UI:下拉列表不能与datepicker一起使用
改进此AngularJS工厂以与socket.io一起使用
我想在AngularJS中使用socket.io。我找到了以下工厂:
app.factory(''socket'', function ($rootScope) { var socket = io.connect(); return { on: function (eventName, callback) { socket.on(eventName, function () { var args = arguments; $rootScope.$apply(function () { callback.apply(socket, args); }); }); }, emit: function (eventName, data, callback) { socket.emit(eventName, data, function () { var args = arguments; $rootScope.$apply(function () { if (callback) { callback.apply(socket, args); } }); }) } };
它在控制器中的使用方式如下:
function MyCtrl($scope, socket) { socket.on(''message'', function(data) { ... });};
问题是每次访问控制器时都会添加另一个侦听器,因此当收到一条消息时,将对其进行多次处理。
将socket.io与AngularJS集成的更好的策略是什么?
编辑:我知道我无法在工厂返回任何东西并在那里进行监听,然后在控制器中使用$ rootScope。$ broadcast和$ scope。$
on,但这看起来不是一个好的解决方案。
EDIT2:添加到工厂
init: function() { socket.removeAllListeners();}
并在每个使用socket.io的控制器的开头调用它。
仍然感觉不是最好的解决方案。
答案1
小编典典销毁控制器时,请删除套接字侦听器。您将需要$destroy
像这样绑定事件:
function MyCtrl($scope, socket) { socket.on(''message'', function(data) { ... }); $scope.$on(''$destroy'', function (event) { socket.removeAllListeners(); // or something like // socket.removeListener(this); });};
有关更多信息,请查看angularjs文档。
Angular JS不适用于IE9,但可以与其他浏览器一起使用
因此,我正在开发一个小型应用程序,该应用程序可以从API网址获取此类代码,例如… $
http.get(s_url).then(function(res){…我的应用程序与chrome,safari,opera和firefox兼容但是在IE9中显示黑屏,我的html或js文件中缺少什么吗?这是我在html文件中的IE
…
<!--[if lte IE 8]> <script src="js/json2.js"></script> <script> document.createElement(''ng-include''); document.createElement(''ng-pluralize''); document.createElement(''ng-view''); document.createElement(''x-restrict''); document.createElement(''x-fileupload''); // Optionally these for CSS document.createElement(''ng:include''); document.createElement(''ng:pluralize''); document.createElement(''ng:view''); //customized tags document.createElement(''location''); document.createElement(''temp''); document.createElement(''image''); document.createElement(''caption''); document.createElement(''temps''); document.createElement(''remtemps''); </script> <![endif]--> <div ng-view></div></head>
答案1
小编典典尝试为ng-app和ng-view加上数据前缀,如data-ng-app和data-ng-view一样。
angularjs – Angular 2 app中的socket.io-client
我正在尝试在我的angular 2应用程序中使用socket.io客户端并安装它和打字
我只是从’socket.io-client’导入;
但不知怎的,我从中得到了很多错误:
如果我从cdn加载脚本并将init代码放在< script>中,我可以在index.html中使用lib.标签,但我不能在我的实际角度2应用程序中使用它.
我在这做错了什么?
这是我的样板:https://github.com/mgechev/angular2-seed
socket.io的例子似乎已经过时了,这就是我避免它们的原因.
这就是我正在做的并且已经得到了这些错误:
import * as io from 'socket.io-client'; [...] var socket = io('127.0.0.1');
所以这个问题似乎与SystemJS有关.
这https://github.com/mgechev/angular2-seed/wiki/Add-external-dependency建议我可以添加socket.io-client,它应该自动添加所有依赖项,但事实并非如此.
我已经尝试了完整的例子,但这也无济于事.
{ packages: { "socket.io-client": {"defaultExtension": "js"} },map: { "socket.io-client": "node_modules/socket.io-client/socket.io.js" } }
然后你只需使用它:
import * as io from "socket.io-client"; io.connect(url,{ /* ... */ });
angularjs – Angular translate指令不与ngMessage一起使用
<body ng-controller="myappCtrl"> <form name="myForm"> <label>Enter your number:</label> <input type="number" name="myNumber" ng-model="name" min="{{minvalue}}" max="{{maxvalue}}"/> <pre>myForm.myNumber.$error = {{ myForm.myNumber.$error | json }}</pre> <pre>myForm.$valid = {{ myForm.$valid | json }}</pre> <div ng-messages="myForm.myNumber.$error"> <div ng-message="number">You did not enter a valid number</div> <div ng-message="min">Your field value is lesser minimum value</div> <div ng-message="max" translate="FORM.MAXVALUE"></div> </div> </form>
link to plnkr
输入高于5的值时,应显示已翻译的错误消息.
当我使用translate指令时,它不起作用.
这是多个范围的问题,你必须包装它.
<div ng-message="max"><span translate="FORM.MAXVALUE"></span></div>
angularjs – Angular UI:下拉列表不能与datepicker一起使用
Html代码:
<divdropdown auto-close="outsideClick"> <buttondropdown-toggle>Date Picker</button> <divrole="menu"> <datepicker show-weeks="false" ng-model="dt"></datepicker> </div> </div>
Plunker:http://plnkr.co/edit/lBn3Oo?p=preview
解决方法
<divdropdown auto-close="outsideClick"> <buttondropdown-toggle>Date Picker</button> <divrole="menu" ng-click="$event.stopPropagation()"> <datepicker show-weeks="false" ng-model="dt"></datepicker> </div> </div>
注意,ng-click =“$event.stopPropagation()”可以解决问题.
演示:http://plnkr.co/edit/pPwW83Ro0u0g4dVhyZaZ?p=info
今天关于改进此AngularJS工厂以与socket.io一起使用的介绍到此结束,谢谢您的阅读,有关Angular JS不适用于IE9,但可以与其他浏览器一起使用、angularjs – Angular 2 app中的socket.io-client、angularjs – Angular translate指令不与ngMessage一起使用、angularjs – Angular UI:下拉列表不能与datepicker一起使用等更多相关知识的信息可以在本站进行查询。
本文标签: