Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不了解Angular JS中的控制器_Javascript_Angularjs_Controller_Firebase_Plunker - Fatal编程技术网

Javascript 不了解Angular JS中的控制器

Javascript 不了解Angular JS中的控制器,javascript,angularjs,controller,firebase,plunker,Javascript,Angularjs,Controller,Firebase,Plunker,这是一个我不习惯问的问题,但我觉得这是理解我在挣扎的唯一途径。如下所示,有两个函数app.controller()和app.factory(),对我来说,这两个函数似乎是相等的,即使我删除了其中一个部分,该函数也无法执行其预期任务 链接到plunker:(相关文件为script.js) 这两个函数有什么区别,为什么我不能只有一个呢?我知道一定有一个简单的解释 app.controller('MainCtrl', ['$scope', 'ItemsService', function ($

这是一个我不习惯问的问题,但我觉得这是理解我在挣扎的唯一途径。如下所示,有两个函数
app.controller()
app.factory()
,对我来说,这两个函数似乎是相等的,即使我删除了其中一个部分,该函数也无法执行其预期任务

链接到plunker:(相关文件为script.js)

这两个函数有什么区别,为什么我不能只有一个呢?我知道一定有一个简单的解释

    app.controller('MainCtrl', ['$scope', 'ItemsService', function ($scope, ItemsService) {
    $scope.newItem = { PlateNumber: '', Description: '', Price: 0 };
    $scope.currentItem = null;

    $scope.items = ItemsService.getItems();

    $scope.addItem = function () {
        ItemsService.addItem(angular.copy($scope.newItem));
        $scope.newItem = { PlateNumber: '', Description: '', Price: 0 };
    };

    $scope.updateItem = function (id) {
        ItemsService.updateItem(id);
    };

    $scope.removeItem = function (id) {
        ItemsService.removeItem(id);
    };
}]);
vs


控制器仅在需要时实例化(使用
ng controller
controllerAs
)。因此,每次切换到不同的路由或页面时,Angular都会实例化一个控制器(它可以是已清理的同一个控制器,例如,如果刷新页面)

Angular providers是一种在应用程序生命周期内保存数据的方法,甚至用于在不同控制器之间传递数据。Angular providers主要有几种类型,其中Factory就是其中之一。您的问题的范围更像是:提供者与控制器,而不是工厂(一种类型)与控制器

在上面的示例中,您有一个控制器,如果有多个控制器呢?如何将数据或实用程序函数传递给多个控制器,而无需反复编写相同的代码?与供应商为一

以下是一些不错的链接供您查看:


虽然这两个看起来很相似,但实际上并不相似,您是否尝试过阅读这些文档?你必须有一个控制器,你不需要工厂。。。更多链接:另一个:服务是单例的,控制器不是。这是一个开始。使用你最喜欢的一个(在本例中)
app.factory('ItemsService', ['$firebase', 'FIREBASE_URI', function ($firebase, FIREBASE_URI) {
    var ref = new Firebase(FIREBASE_URI);
    var items = $firebase(ref);

    var getItems = function () {
        return items;
    };

    var addItem = function (item) {
        items.$add(item);
    };

    var updateItem = function (id) {
        items.$save(id);
    };

    var removeItem = function (id) {
        items.$remove(id);
    };

    return {
        getItems: getItems,
        addItem: addItem,
        updateItem: updateItem,
        removeItem: removeItem
    }
}]);