2014-02-19 74 views
0

嗨! 我正在做一個web應用程序,我需要將我的數組共享到我的控制器。 謝謝。如何將典型控制器轉換爲服務/工廠ANGULARJS?

MyControllers.controller('MyCtrl',['$scope', 

function ($scope){ 
    $scope.items = [{id:1}, {id:2}, {id:3}]; 

    $scope.addNewItem = function() { 
     var newItemNo = $scopeItems.length+1; 
     $scope.Items.push({'id':newItemNo}); 
    }; 

    $scope.showAddItem = function(Item) { 
     return Item.id === $scope.Items[$scope.Items.length-1].id; 
    }; 
} 
]); 

回答

0

角度工廠是單身的,所以來自工廠的數據可以在所有控制器之間共享。您只需將工廠注入控制器。

var myApp = angular.module('myApp'); 

myApp.factory('myService', function() { 
    var _items = [{id:1}, {id:2}, {id:3}]; 

    return { items : _items }; 
}); 

myApp.controller('MyCtrl1',['$scope', 'myService', function ($scope, myService){ 
    $scope.items = myService.items; 
]); 

myApp.controller('MyCtrl2',['$scope', 'myService', function ($scope, myService){ 
    $scope.items = myService.items; 
]); 
+0

非常感謝!佳日。 我在服務和工廠之間感到困惑。 但是,如果我想添加項目到我的陣列,我需要做這樣的事情? myApp.factory('myService',function($ scope){ var _items = [{id:1},{id:2},{id:3}]; addItem:function($ scope){_items .push($ scope.item)} return {items:_items}; }); –

+0

是的,我通常也這樣做。有助於保持控制器輕量化。 – Yashvit

0

您的代碼有幾個問題。 你有

var newItemNo = $scopeItems.length+1; 

,你可能想

var newItemNo = $scope.Items.length+1; 

謝謝:)

另外,您

MyController.controller 

一部分,你要像

angular.module('appName').controller 

此外,您可以將您的服務注入到您的控制器或綁定到$ rootcope,但這不應該在您的情況下需要。 :D

+0

謝謝,我在提出問題之前更改了名稱,我忘了點。 –

+0

當然,我想注入我的服務到控制器,但我的問題是「創建服務」。 –

相關問題