【问题标题】:“Uncaught TypeError: undefined is not a function” AngularJS-BreezeJS“未捕获的类型错误:未定义不是函数”AngularJS-BreezeJS
【发布时间】:2014-06-21 03:34:44
【问题描述】:

我正在使用 Angular 设置一个非常简单的应用程序,但出现错误。 TypeError: undefined is not a function at 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'
        };
    }
})();

文件数据上下文 - 依赖注入器

/***
 * 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;
    }
})()

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

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    您的依赖声明数量和顺序不正确,我看到一些拼写错误。应该是这样的

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

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 2014-12-13
      • 2014-08-11
      • 2015-04-14
      相关资源
      最近更新 更多