簡體   English   中英

同時添加服務和過濾器或多個服務時,導致未知提供程序的原因是什么?

[英]What am I doing thats causing Unknown Provider when Adding both a service and a filter or multiple services

這很可能是由於我缺乏經驗並且忽略了一些基本知識,但是在SO,angulajs 教程指南以及Googling之間,我找不到可以遵循的解釋或示例。

我已經成功創建了一個工廠,並在控制器和過濾器中使用了它,但是只有一個或另一個。 當我嘗試將兩者都添加到模塊時,出現Error: Unknown provider: memberFactoryProvider <- memberFactory

我的代碼在下面,但我有一些問題:

1.將工廠和服務(或多個工廠/過濾器)添加到模塊中時,足以用與您使用單個工廠相同的方式創建它們,即,如果我聲明了許多工廠,如下所示:

'use strict';

angular.module('testApp', [])
    .factory('factory1', function () {
        var obj = {};
        obj.text = "This is a test";
        return obj;
    });
angular.module('testApp', [])
    .factory('factory2', function () {
        var obj = {};
        obj.text = "This is another test";
        return obj;
    });

是否足以使用angular.module('testApp', ['factory1', 'factory2']);在app.js中包含兩者angular.module('testApp', ['factory1', 'factory2']);

2.我在線上注意到一些帖子,它們在創建過濾器/工廠時會附加應用名稱,例如:

angular.module('testApp', [])
          .factory('testApp.factory1', function () {
          var obj = {};

          obj.text = "This is a test";
      return obj;});

這是必需的還是個人喜好?

最后,下面是我所有的代碼,如上所述,它們都是單獨工作的,但是當我嘗試將它們組合在一起時,會遇到上述錯誤,我們將不勝感激任何建議或幫助

的index.html

<!DOCTYPE html>
<html data-ng-app="testApp">

    <head>
        <title>prototype</title>
        <script type="text/javascript" src="jquery-2.0.3.min.js"></script>
    </head>

    <body>
        <div data-ng-controller="myController">
            <br/>
            <div data-ng-repeat="n in [] | range:5">
                <div data-ng-repeat="">{{test}}</div>
            </div>
        </div>
        <br/>
        <br/>
        <script type="text/javascript" src="angular.min.js"></script>
        <script type="text/javascript" src="js/app.js"></script>
        <script type="text/javascript" src="js/services.js"></script>
        <script type="text/javascript" src="js/filters.js"></script>
        <script type="text/javascript" src="js/controllers.js"></script>
    </body>

</html>

App.js

'use strict';

angular.module('testApp', ['memberFactory', 'range']);

services.js

'use strict';

angular.module('testApp',[])
    .factory('memberFactory', function(){
        var obj = {};

        obj.text = "This is a test";
        return obj;
    });

filters.js

'use strict';

angular.module('testApp',[]).filter('testApp.range', function() {
  return function(input, total) {
    total = parseInt(total);
    for (var i=0; i<total; i++)
      input.push(i);
    return input;
  };
});

controllers.js

function myController($scope, memberFactory){ 
            $scope.test= memberFactory.text;
        }

首先,你應該這樣做

angular.module('testApp', [])
.factory('factory1', function () {
    var obj = {};
    obj.text = "This is a test";
    return obj;
})

.factory('factory2', function () {
    var obj = {};
    obj.text = "This is another test";
    return obj;
});

您不應該創建2個相同名稱的模塊。

我認為

angular.module('something', ['here', 'is', 'for modules', 'only'];

我認為您正在嘗試做的是這個。

您有2個模塊?

var helpers = angular.module('helpers', []);

那你應該做

var app = angular.module('app', ['helpers']);

然后,您將可以訪問連接到幫助程序和應用程序的所有工廠

舉例來說,您希望過濾器位於另一個文件中,可以通過幾種方法

var filters = angular.module('filters', []);
filters.filter('name', func...);

然后像這樣將其包含在您的應用中

var app = angular.module('app', ['helpers', 'filters']);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM