不完全确定如何说出我的问题,但我的关注涉及一个我称之为xyzApi的对象。我在我的角度代码之外定义了这个对象,它包含了一些类和实用方法等,我希望它可以用于我的其余api。
看起来像这样(简短版):
var xyzApi = xyzApi || {
entities : new function () {
this.oAuthToken = function (token, expires, type) {
this.token = token;
this.expires = expires;
this.type = type;
this.toString = function () {
if (this.token != null)
return this.type + ' ' + this.token;
return null;
};
};
}
};
现在,我的角度服务层创建了一个名为xyzApi的提供程序。它看起来像这样:
(function () {
angular.module('xyzDataWebServices').provider('xyzApi', function () {
var baseUrl;
this.setBaseUrl = function (value) {
baseUrl = value;
};
this.$get = ['$log', 'baseRequest', 'xyzApiContext', 'xyzApiAuthentication', 'xyzApiLibrary', function xyzApiFactory($log, baseRequest, xyzApiContext, xyzApiAuthenication, xyzApiLibrary) {
baseRequest.setServiceUrl(baseUrl);
var factory = {
context: xyzApiContext,
authentication: xyzApiAuthenication,
library: xyzApiLibrary
}
return factory;
}];
});
})();
现在,当代码使用提供程序时,我希望将原始对象合并到提供程序中,就好像它是它的一部分一样。
这会自动发生,还是会在使用提供程序的控制器范围内导致原始对象不可见?
答案 0 :(得分:1)
如果我理解正确,您可以将preferences.getInt(myKey, myDefaultValue)
和factory
合并到您的提供商内。
我认为这不会自动发生。但是,如果您在提供商中添加xyzApi
,它应该像您想要的那样工作。
angular.merge(factory, xyzApi);
正在使用Angular 1.4或更高版本。 angular.merge()
可能也会起作用,但深度合并则不会发生。
请查看下面的演示或此jsfiddle。
它只显示这两个对象的合并。
angular.extend()
var xyzApi = xyzApi || {
sayHello: function() {
return "hey there\n";
}
};
angular.module('demoApp', [])
.controller('MainController', MainController)
.provider('xyzApi', function XyzApiProvider() {
this.$get = function() {
var xyzApiFactory = {
otherFunction: function() {
//$log.log('other function called');
return 'other function \n';
}
};
//console.log(xyzApiFactory, xyzApi);
angular.merge(xyzApiFactory, xyzApi);
return xyzApiFactory;
};
});
function MainController(xyzApi) {
var vm = this;
vm.test = '';
vm.sayHello = function() {
vm.test += xyzApi.sayHello() + xyzApi.otherFunction();
}
}