AngularJS / Sqlite / Electron - 未知提供者:$dbServiceProvider

Posted

技术标签:

【中文标题】AngularJS / Sqlite / Electron - 未知提供者:$dbServiceProvider【英文标题】:AngularJS / Sqlite / Electron - Unknown provider: $dbServiceProvider 【发布时间】:2019-12-27 05:59:21 【问题描述】:

我正在尝试构建电子应用程序,该应用程序从我创建的 SQL 数据库中显示/检索表上的项目,但出现未知提供程序错误。

我尝试在网络上遵循一些解决方案,但问题仍然存在,我不知道哪里做错了

这是我连接到数据库的角度服务 (dbService.js)

app.factory("dbService", function ($http) 
    var sqlite = require('sqlite-sync');
    var db = sqlite.connect('model/database.db');
    return db;
);

这是我的控制器 (salesController.js)

app.controller("salesController", function ($scope, $location, $dbService) 
    $scope.sub = 
        'title': 'Sales Management'
    

    $scope.listSales = function () 
        dbService.runAsync("SELECT * FROM sales WHERE active = 1", function (data) 
            $scope.sales = data;
        );
    

);

这是我的模块(app.js)

var app = angular.module('bpApp', ['ui.router', 'angularUtils.directives.dirPagination']);

最后我添加了这段代码来显示我的表中的数据 (sales.html)

....
<tbody>
 <tr class="bz-tablecell" dir-paginate="sale in   sales|filter:search|itemsPerPage:8">
     <td id="table-checkbox"><input type="checkbox"></td>
                <td style="font-weight: 600">sale.name</td>
                <td>sale.amount</td>
                <td>sale.quantity</td>
                <td><a href="#">sale.customer</a></td>
                <td>sale.date</td>
                <td class="export-ignore"><span class="approved" style="border-radius: 0 !important;">sale.status</span></td>
                <td class="export-ignore"><a href="#">Manage</a></td>
            </tr>
        </tbody>
...

我已经在我的 index.html 中包含了所有需要的文件,然后通过 ui-view 加载 sale.html,加载视图正常,但没有从我的数据库中检索数据,我不断收到错误:

Error: [$injector:unpr] Unknown provider: $dbServiceProvider <- $dbService <- salesController

请帮我解决它...

【问题讨论】:

【参考方案1】:

尝试将控制器的声明更改为

app.controller("salesController", function ($scope, $location, dbService) 

您的 dbService 工厂不是 AngularJS API,它有 $prefix,这就是它无法注入它的原因。

请参考https://docs.angularjs.org/guide/concepts#angular_namespace

$' 前缀命名约定 您可以创建自己的服务,实际上我们将在第 11 步中这样做。作为命名约定,Angular 的内置服务、Scope 方法和一些其他 Angular API 在名称前有一个“$”前缀。命名服务和模型时不要使用“$”前缀,以避免任何可能的命名冲突。

Angular 命名空间 为了防止意外的名称冲突,Angular 会为可能与 $ 冲突的对象的名称添加前缀。请不要在代码中使用 $ 前缀,因为它可能会与 Angular 代码发生意外冲突。

【讨论】:

非常感谢。解决了这个错误,花一整天的时间来解决这个问题

以上是关于AngularJS / Sqlite / Electron - 未知提供者:$dbServiceProvider的主要内容,如果未能解决你的问题,请参考以下文章

解析ELEC129 Programming in C

在angularjs中执行函数后执行代码

阶梯电费计算器一般计算

Experiment 22 - Monte Carlo Simulation

带有 SQLite 数据库的 Cordova 应用程序在 iOS 中首次运行后冻结,但在 Android 中运行良好

hibernate操作大文本字段Blob和Clob