私は、ファクトリで保持されている関数のライブラリをコントローラに組み込もうとしています。このような質問に似て : Creating common controller functions
マイメインコントローラは次のようになります。そして、
recipeApp.controller('recipeController', function ($scope, groceryInterface, ...){
$scope.groceryList = [];
// ...etc...
/* trying to retrieve the functions here */
$scope.groceryFunc = groceryInterface; // would call ng-click="groceryFunc.addToList()" in main view
/* Also tried this:
$scope.addToList = groceryInterface.addToList();
$scope.clearList = groceryInterface.clearList();
$scope.add = groceryInterface.add();
$scope.addUp = groceryInterface.addUp(); */
}
、別の.jsファイルでは、私は工場groceryInterfaceを作成しました。私はこの工場を上記のコントローラに注入しました。
工場
recipeApp.factory('groceryInterface', function(){
var factory = {};
factory.addToList = function(recipe){
$scope.groceryList.push(recipe);
... etc....
}
factory.clearList = function() {
var last = $scope.prevIngredients.pop();
.... etc...
}
factory.add = function() {
$scope.ingredientsList[0].amount = $scope.ingredientsList[0].amount + 5;
}
factory.addUp = function(){
etc...
}
return factory;
});
しかし、私のコンソールで、私はもちろん、私はこれは私が以内に私の機能で$scope
を使用していたという事実に関係している推測しているなど、をReferenceError: $scope is not defined at Object.factory.addToList
を得続けます工場。これをどうやって解決するのですか?私は多くの他の例で見てきましたが、誰も外部ファクトリ関数内で$scope
を使用することはありません。私は私の工場でパラメータとして$scope
を注入しようとしましたが、それはうまく動作しませんでした。 (例:recipeApp.factory('groceryInterface', function(){
)
本当にありがとうございます。
甘い、ありがとう。私はこれを試してみよう! – LazerSharks
@Gnuey - 古いバージョンのIEでは 'bind'が利用できないことに注意してください。これらをサポートする必要があり、最初のメソッドを使いたい場合は、[this MDN polyfill](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#互換性)、またはページにjQueryがある場合は、代わりに['$ $ .proxy'](http://api.jquery.com/jQuery.proxy/)を使用してください。 –
さて、素晴らしい。それは実際には非常に有益な情報です - 私の部長とサイト訪問者は時々何らかの理由で古いIEバージョンを使用します:\代わりに '$ scope.addToList = $ .proxy(groceryInterface.addToList、$ scope)'と書くでしょうか? – LazerSharks