从服务返回值到控制器

时间:2017-09-16 18:18:49

标签: javascript angularjs parameter-passing

在我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会容易得多。

1 个答案:

答案 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()