[英]Call angular factory with pure javascript
我很难为这个问题命名,但是基本上我只是从angular开始,并且正在使用ngMaterial。 我有一个用角工厂创建的吐司
app.factory('notify', ['$mdToast', '$animate', function($mdToast, $animate) {
return {
showToast: function(msg) {
var toast = $mdToast.simple()
.content(msg)
.action('Close')
.highlightAction(false)
.position('top right');
$mdToast.show(toast).then(function() {
//
});
}
}
}]);
如果我在页面上有一个按钮可以激活吐司,那么这很好用,但是我同时运行socket.io以及节点监视redis,以更新弹出该通知。 但是我不能使它正常工作,因为我不确定如何从这里调用该工厂
socket.on('notification.new', function (data) {
//call factory here to show toast
console.log(data);
});
我知道我是否可以在控制器上使用它
angular.element().scope().showToast(data)
但是我不想创建一个元素只是为了容纳控制器来调用函数。
解决此问题的方法是将控制器内部的功能之一附加到window
对象。 所以像
window.showToast = function(msg) {
var toast = $mdToast.simple()
.content(msg)
.action('Close')
.highlightAction(false)
.position('top right');
$mdToast.show(toast).then(function() {
//
});
然后,从套接字io侦听器(或与此相关的任何原始javascript)中:
socket.on('notification.new', function (data) {
//call factory here to show toast
window.showToast(data); //or however you'd like
});
这样对我有用。 我知道这不是最好的方法,但是由于这个问题根本没有任何答案,因此我认为我将发布一种变通办法,至少完成此工作。
您需要掌握Angular服务,才能在原始Javascript中使用Angular。
- angular.element(domElement).scope()获取元素的当前范围
- angular.element(domElement).injector()获取当前的应用程序注入器
- angular.element(domElement).controller()来获取ng-controller实例的所有权。
在您的情况下,请使用injector
服务来控制您的工厂。
更新1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.