不理解Angular JS中的控制器

Do not understand the controllers in Angular JS

本文关键字:控制器 JS Angular 不理解      更新时间:2024-02-23

这是我不习惯问的问题,但我觉得这是理解我正在挣扎的问题的唯一方法。如下所示,有两个函数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);
    };
}]);

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
    }
}]);

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

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

在上面的例子中,你有一个控制器,如果你有很多呢?如何在不反复编写相同代码的情况下将数据或实用程序函数传递给多个控制器?与供应商为一!

这里有一些好的链接供您查看:

Angular Provider文档

Tyler McGinnis的博客文章解释了上述进一步的

JSFiddle与工厂与服务的示例