“Uncaught TypeError:undefined不是函数”AngularJS-BreezeJS

时间:2014-06-21 03:34:45

标签: javascript angularjs

我设置了一个非常简单的角度应用,我收到了错误。 TypeError:undefined不是getSh的函数(App / allVM.js:23:32) 文件allVM.js

(function () {
    'use strict';
    var controllerId = 'sharticles';
    angular.module('myApp')
    .controller(controllerId,['datacontext','logger',sharticles]);

    function sharticles($scope,datacontext, logger) {
        //logger = logger.forSource(controllerId);
        //var logError = logger.logError;
        //var logSuccess = logger.logSuccess;
        var vm = this;
        vm.articles = [];

        initialize();

        /*Hiện thực*/
        function initialize() {
            getSh();
        }

        function getSh(forceRefresh) {
            return datacontext.getSh(forceRefresh).then(function (data) { //Line 23
                return vm.articles = data;
                console.log(data);
            });
        }
        $scope.datas = vm.articles;
        $scope.gridDatas = {
            data: 'datas'
        };
    }
})();

文件datacontext - 依赖注入器

/***
 * Service: datacontext 
 *
 * Xử lý tất cả các lưu trữ và tạo xóa các app entity
 * dùng BreezeJS.
 *
 ***/
(function () {
    'use strict';

    var serviceId = 'datacontext';
    angular.module('myApp').factory(serviceId,['$q', 'logger', 'entityManagerFactoryOData', datacontext]);

    function datacontext($q,logger,emFactory) {
        logger = logger.forSource(serviceId);
        var logError = logger.logError;
        var logSuccess = logger.logSuccess;
        var logWarning = logger.logWarning;

        var manager = emFactory.newManager();


        /*********Hiện thực chung*********/
        //1.Nhận số record thay đổi
        function getChangesCount() { return manager.getChanges().length; }

        function hasChanges(){return manager.hasChanges();}
        //4.Lưu thay đổi xuống server
        function prepareSaveBatches() {
            /*!@#$
            *Web API Odata không tự tính toán được thứ tự lưu xuống database
            *nghĩa là, nếu không cẩn thận trên client
            *chúng ta có thể lưu mục con trước khi lưu một mục cha được tạo mới.
            *Với Odata để client lưu các entity theo một thứ tự đúng thì phải :
            *+ Ràng buộc constraint của database(chưa biết phải code sao)
            *+ Lưu ngay mỗi khi thay đổi bất kỳ thứ gì (không ổn lắm)
            *+ Phần chia ràng buộc các thay đổi thành 4 lô :
            *1. Đã xóa mục con
            *2. Đã xóa mục cha
            *3. Đã thêm mục cha mới
            *4. Mọi thay đổi khác
            */
            var batches = [];
            batches.push(manager.getEntities(['ShArticles'], [breeze.EntityState.Added]));
            batches.push(null);// trống thì sẽ lưu tất cả thay đổi còn lại
            return batches;
        }
        function save() {
            var count = getChangesCount();
            var promise = null;
            var saveBatches = prepareSaveBatches();
            saveBatches.forEach(function (batch) {
                //Nhận các batch trống (ngoại trừ 'null' thì lưu tất cả mọi thứ khác)
                if (bactch == null || batch.length > 0) {
                    promise = promise ? promise.then(function () { return manager.saveChanges(batch); }) :
                        manager.saveChanges(batch);
                }
            })
        }


        /********Hiện thực bảng ShMembers********/
        //3.Nhận bảng ShMembers
        function getSh(forceRefresh) {
            var count;
            if (forceRefresh) {
                if (manager.hasChanges()) {
                    count = getChangesCount();
                    manager.rejectChanges();//trả về giá trị ban đầu trong cache cho các giá trị bị thay đổi nhưng không được lưu
                    logWarning('Có ' + count + ' bị thay đổi', null, true);
                }
            }
            //Nếu không forceRefresh,cân nhắc nhận từ cache hơn là truy vấn giá trị mới từ xa
            return breeze.EntityQuery.from('ShArticles')
                    .using(manager).execute()
                    .then(success).catch(failed);
            function success(response) {
                count = response.results.length;
                logSuccess('Nhận ' + count + ' dòng', response, true);
                return response.results;
            }
            function failed(error) {
                var message = error.message || "Truy vấn bảng ShArticles";
                logError(message, error, true);
            }
        }
        /********Thiết lập chung********/
        var service = {
            //getChangesCount:getChangesCount,
            //hasChanges:hasChanges,
            //save:save,
            getSh:getSh
        };
        return service;
    }
})()

任何想法都会很棒。谢谢!

1 个答案:

答案 0 :(得分:1)

您的依赖声明的编号和顺序不正确,我看到一些错别字。它应该像

.controller(controllerId,['$scope','datacontext','logger', sharticles]);

    function sharticles($scope,datacontext, logger) {