我试图了解提供程序在Angular 1.x中的工作方式。 我写这个东西来测试通过提供者发送角度事件对象:
var myMo = angular.module('myModule', [], function ($interpolateProvider) {
$interpolateProvider.startSymbol('<%').endSymbol('%>');
});
myMo.provider ('eventTransport', function() {
this.evento='';
this.setEvent = function (event) {
this.evento = event;
};
this.$get = function () {
var enento = this.evento;
return {
returnName: function () {
return evento;
}
};
};
});
myMo.controller('MoCtrl', function ($scope, eventTransport) {
$scope.signclick = function (eventobj) {
console.warn('click');
eventTransport.setEvent(eventobj);
console.warn('clack');
console.log(eventTransport.returnName());
$scope.test = true;
}; });
我收到setEvent() is not a function
的错误。请告诉我我的错误在哪里?还告诉我如何将数据发送到提供者配置功能(myMo.config)我发现了很多通过角度服务传输数据的例子,没有通过提供者传输数据的明确例子。
答案 0 :(得分:0)
服务及其提供商不尽相同。您可以在启动时对provider
进行一些自定义初始化(您需要添加后缀提供程序)。但是在控制器中,您将获得在$get
函数中定义的对象/函数。
myMo.config(function (eventTransportProvider) {
eventTransportProvider.setEvent(eventobj);
});
编辑: 我认为你不需要在启动时做任何事情。您只需使用提供商来配置您的服务。对于您的用例,您可以使用简单的getter和setter函数。
myMo.provider ('eventTransport', function() {
this.$get = function () {
var evento = '';
return {
getEvent: function () {
return evento;
},
setEvent: function(event) {
evento = event;
}
};
};
});
provider
只是factory
或service
的更强大版本,但大多数情况下您不需要使用provider
myMo.factory('eventTransport', function() {
var evento = '';
return {
getEvent: function () {
return evento;
},
setEvent: function(event) {
evento = event;
}
};
});
答案 1 :(得分:0)
只能从控制器访问此。$ get {}中定义的属性和函数。就目前而言,我认为您的this.setEvent函数只能在配置阶段访问,并且您需要使用以下内容调用它:
myMo.config(['eventTransportProvider', function(eventTransportProvider) {
eventTransportProvider.setEvent(...);
}]);
您需要提供者吗?也许工厂会更合适。
编辑:如果你需要能够从.config和控制器中设置setEvent(),你可以这样做:
myMo.provider ('eventTransport', function eventTransportProvider() {
var _evento = null;
this.setEvent = function(event) {
_evento = event;
};
this.$get = [function eventTransportFactory() {
var service = {
getEvent: function() {
return _evento;
},
setEvent: function(event) {
_evento = event;
}
};
return service;
}];
});