将逻辑移动到Angular中的服务

时间:2014-06-02 15:28:42

标签: javascript angularjs

我的控制器中有很多逻辑,我发现它并不好。因此,我想将其转移到服务中。

目前,控制器接受来自YouTube或Vimeo的网址。它会检测字符串" youtube"或" vimeo"存在于URL中,然后执行相应的操作。这是"逻辑"的一部分。目前驻留在控制器中:

if url.indexOf("youtube") > -1 {
  variable_1 = "Something";
  variable_2 = "Something";
  //do some more stuff
}
else {
  variable_1 = "Something";
  variable_2 = "Something";
  //do some more stuff
}

$scope.task.items.push("I need to add things to this array too");

服务是可行的方式,但我的第一个问题是servicefactory

这就是我正在研究的内容,但我不确定在服务完成后如何将控制器中存在的变量(variable_1和variable_2)传递回控制器。

myApp.service('urlService', function() {
    this.detectProvider = function() {

        if url.indexOf("youtube") > -1 {

        }
        else {

        }

        //how can I push things to the $scope array here?


    };
});

3 个答案:

答案 0 :(得分:1)

在您的服务中

myApp.service('urlService', function() {
this.detectProvider = function(url) {
    arrayOfMyVars = new Array();
    if url.indexOf("youtube") > -1 {
        arrayOfMyVars.push("Something");
        arrayOfMyVars.push("SomethingElse");
    }
    else {
        arrayOfMyVars.push("Something");
        arrayOfMyVars.push("SomethingElse");
    }

    //how can I push things to the $scope array here?

return arrayOfMyVars;
};
});
控制器中的

var res = urlService.detectProvider(url);
variable_1=res[0];
variable_2=res[1];
$scope.task.items.push('the thing you need to push'); // maybe res[2] and in your service you had another arrayOfMyVars.push('the thing you need to push')...

不要忘记将您的服务导入您的控制器;)

答案 1 :(得分:1)

  

服务是要走的路,但我的第一个问题是服务还是服务   工厂?

简单来说,这无关紧要。从个人的角度来看,只使用最适合自己的东西。 service将创建函数的新实例,factory将只执行该函数,而不创建它的新实例。

关于您的第二个问题:只需在服务方法中退回variable_1variable_2,然后将其分配到$scope

myApp.service('urlService', function() {
    this.detectProvider = function(url) {

        if url.indexOf("youtube") > -1 {
             ...
             return [variable_1, variable_2];
        }
        else {
             ...
             return [variable_1, variable_2];
        } 
    };
});

答案 2 :(得分:0)

服务或工厂都是单例实例。最后,你只会得到对象。 在服务中,您将使用功能构造函数创建 在Factory中,我们可以使用对象升级来构造它