【问题标题】:Returning value from service to controller从服务返回值到控制器
【发布时间】:2017-09-16 18:18:49
【问题描述】:

在我对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方法从开始到结束的路很长,简单来说就是:view(click)->controller->service1->service2。

现在的问题是,如何将这个变量 lol 传递回控制器,以便最终在视图中显示这个转换后的颜色?

我已经尝试过承诺但没有运气。如果我只有一项服务,使用 Promise 会容易得多。

【问题讨论】:

  • 要从函数传回值,请使用return statement
  • 你尝试了一些没有运气的东西,但你没有向我们展示没有运气的代码。很遗憾,我们无法修复我们看不到的代码。

标签: javascript angularjs parameter-passing


【解决方案1】:

如果您将代码放在操场上(jsfiddle、codepen 等)会有所帮助,所以我可以用一个很好的代码示例来回应。听起来您需要在 convert 方法中设置的 lol 的服务成员/属性,以及获取该值以便可以在控制器中检索的方法。

服务

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    相关资源
    最近更新 更多