我的控制器中有很多逻辑,我发现它并不好。因此,我想将其转移到服务中。
目前,控制器接受来自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");
服务是可行的方式,但我的第一个问题是service
或factory
?
这就是我正在研究的内容,但我不确定在服务完成后如何将控制器中存在的变量(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?
};
});
答案 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_1
和variable_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中,我们可以使用对象升级来构造它