在我input[submit]
点击的视图中,我从控制器执行函数,该函数从服务执行另一个函数。
controller.js
colorCheckerService.colorCheck(vm.color_field);
就会启动。检查颜色后,我从其他服务执行另一个功能:
this.colorCheck = function(color_field) {
console.log('im working colorCheck function in service');
switch (color_field.charAt(0)) {
case 'r':
console.log('its RGB');
colorChangerService.colorChange.fromRGB.prepareAndExecute(color_field);
break;
因此,行colorChangerService.colorChange.fromRGB.prepareAndExecute(color_field);
在service1中并且它正在启动service2
toHEX: {
supportFunc: function(number) {
var hex = number.toString(16);
return hex.length == 1 ? '0' + hex : hex;
},
convert: function(r, g, b) {
var lol = '#' + this.supportFunc(r) + this.supportFunc(g) + this.supportFunc(b);
console.log(lol);
}
},
prepareAndExecute: function(color_field) {
// preparing
var numbers = color_field.match(/\d+/g);
if(numbers.length == 3) {
this.toHEX.convert(+numbers[0], +numbers[1], +numbers[2]);
} else {
alert('wrong RGB number format');
}
这基本上是将RGB转换为HEX。它运作良好,完成了console.log(lol);
行的工作。 lol
变量包含转换后的颜色。
从开始到结束此console.log
方法的方式很长,简而言之就是:查看(点击) - >控制器 - > service1 - >服务2。
现在问题是,如何将此变量lol
传递回控制器,以便最终在视图中显示此转换后的颜色?
我已经尝试过但没有运气。如果我只有一项服务,那么使用promise会容易得多。
答案 0 :(得分:0)
如果你把你的代码放在游乐场(jsfiddle,codepen等等),这将有所帮助,所以我可以回答一个好的代码示例。听起来你需要lol
的服务成员/属性,你在convert
方法中设置,以及获取该值的方法,以便可以在控制器中检索它。
toHEX: {
supportFunc: function(number) {
var hex = number.toString(16);
return hex.length == 1 ? '0' + hex : hex;
},
lol: "",
convert: function(r, g, b) {
this.lol = '#' + this.supportFunc(r) + this.supportFunc(g) + this.supportFunc(b);
console.log(lol);
}
},
getLol: function() { return this.toHEX.lol; }
然后在需要它的控制器中调用colorChangerService.colorChange.fromRGB.getLol()
。