2016-09-22 25 views
0

可以說我有一個服務函數,它接受一個靜態參數和第二個自定義參數,它根據注入的控制器而變化。我希望我的控制器/視圖調用此服務函數,而不必在控制器中編寫自定義方法來傳遞該自定義參數。我不確定這項技術是否涉及捲曲,調用,綁定或應用。JavaScript/Angular借用一個函數並附加參數

.service('ExampleSvc', function() { 
    this.call = function(param, controller) { 
    console.debug(param, controller); 
    } 
}) 

.controller('FirstCtrl', function($scope, ExampleSvc) { 
    $scope.call = ExampleSvc.call; // magic happens here 

    // avoid writing below 
    $scope.call = function() { 
    ExampleSvc.call('param', 'FirstCtrl'); 
    } 
}); 

.controller('SecondCtrl', function($scope, ExampleSvc) { 
    $scope.call = ExampleSvc.call; // magic happens here 

    // avoid writing below 
    $scope.call = function() { 
    ExampleSvc.call('param', 'SecondCtrl'); 
    } 
}); 
+0

什麼是「靜態參數」? – JLRishe

+0

它只是服務功能所需的一個參數。 – tothefux

+0

它從哪裏來?從每個控制器內?或者它始終是一樣的價值?如果它始終是相同的值,爲什麼不在服務中給它一個固定值,而不是依靠每個控制器來正確傳遞它? – JLRishe

回答

1

據我瞭解您需要在視圖中使用的服務,所以最簡單的就是設置$範圍變量作爲服務:

$scope.service=$service; 

所以從服務的每一個方法可以直接從視圖中調用,無需創建任何特殊的$ scope方法。

如果需要的是隻有一個方法,我們需要改變它的paramater則:

$scope.call = function(){ ExampleSvc.call.call(this,'param', 'FirstCtrl'); }; 

我創建了呼籲我們呼叫(第二個電話是在原型方法建造調用函數)匿名functiom方法與理想的參數。

但是如果你的服務在每個用法上都不同,那麼更好的方法是返回服務構造函數。所以我們每次都可以使用新的關鍵字,並有新的服務對象。

//服務代碼

return function(controller){ 

    this.controller=controller; 

    //here methods ... 

}; 

//控制器代碼

$scope.service=new service("ControllerName"); 

所以在這種方法中,我們可以有不同的服務對象在每次使用,所以它繞過去單身人士這是服務tipical。我會盡量表現出這種方法的例子:

var app=angular.module("app",[]); 
 

 
app.controller("cont1",function($scope,person){ 
 

 
    $scope.p=new person("Tom","Hanks"); 
 
    
 
}); 
 

 
app.controller("cont2",function($scope,person){ 
 

 
    $scope.p=new person("Will","Smith"); 
 
    
 
}); 
 

 
//our service which returns constructor 
 
app.service("person",function(){ 
 

 
    return function(name,surname){ 
 
    
 
    this.name=name; 
 
    this.surname=surname; 
 
    
 
    
 
    this.getName=function(){ 
 
    
 
     return this.name; 
 
     
 
    }; 
 
    
 
    this.getSurname=function(){ 
 
    
 
     return this.surname; 
 
    }; 
 
    
 
    }; 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app"> 
 
    
 
    <div ng-controller="cont1"> 
 
    
 
     <span> Person is: <b>{{p.getName()}} {{p.getSurname()}}</b></span> 
 
    </div> 
 
    
 
    <div ng-controller="cont2"> 
 
     <span> Person is: <b>{{p.getName()}} {{p.getSurname()}}</b></span> 
 
    </div> 
 
    
 
    
 
</div>

因此,我們可以通過創建新的對象使用我們的服務以不同的方式。將它發送到作用域可以直接在那裏運行配置的對象。

+0

@tothefux檢查我編輯的答案與使用構造函數在服務中的示例。這是你需要的嗎? –

相關問題