2014-02-19 77 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

当然,我想注入我的服务到控制器,但我的问题是“创建服务”。 –

相关问题