angular.js Ошибка: неизвестный провайдер angular-seed

Я начал новый проект в angularjs с angular-seed. Я попытался добавить какую-то директиву, но безуспешно.

Цель состоит в том, что у меня есть 2 варианта/поля в моем контроллере, и я хотел бы сгенерировать поля для этих вариантов.

Я всегда получаю сообщение об ошибке: неизвестный поставщик: $scopeProvider ‹- $scope ‹- gendivDirective

нужна ли инъекция зависимостей или что-то еще? Или это неправильный масштаб? Контроллер должен быть доступен в директивах?

Спасибо, Патрик

тест.html:

<!doctype html>
<html ng-app="myApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
<script src="js/script.js"></script>
</head>
<body>

 <div ng-controller="FormCtrl">
        <span gendiv>
       </span>
    </div>
</body>
</html>

скрипт.js:

angular.module('myApp', ['myApp.directives','myApp.controllers']);

/* Controllers */

angular.module('myApp.controllers', [])
.controller('FormCtrl', ['$scope', function ($scope) {
$scope.choices = {
    object: [
        {label: "Choice0"},
        {label: "Choice1"}
    ]
};

$scope.addChoice = function() {
    $scope.choices.object.push({
        label: 'Choice' + $scope.choices.object.length.toString()
    });
};


}]);

/* directives */

angular.module('myApp.directives', [])
  .directive('gendiv', ['$scope', function($scope) {
return {
    controller: 'FormCtrl',
    template: '<div class="control-group" ng-repeat="choice in choices.object">' + 
               '<label class="control-label" for="{{choice.label}}">{{choice.label}}</label>' +
                '<div class="controls" style="color: #0044cc">' +
                    '<input type="text" placeholder="Enter second choice here" name="choices[]" data-ng-model="choices[]" required> <i class="icon-plus-sign icon-large" style="padding-left:10px;cursor: pointer" alt="add choice" ng-click="addChoice()"  class="add"></i>' +
                '</div>' +
                '<span ng-show="myForm.name.$error.required" class="help-inline">Required</span>' +
              '</div>',
    link: function (scope, elem, attrs) {
        console.log("Recognized the directive usage");
    }
}
  }]);

person Patrick Winkler    schedule 16.07.2013    source источник


Ответы (2)


Вы не можете внедрить $scope в директиву. В любом случае он передается функции ссылки, поэтому вам это не нужно. На самом деле я не вижу, чтобы вы использовали его где-либо в своем коде.

person Karen Zilles    schedule 17.07.2013
comment
хорошо, если я ничего не передаю, директива также не найдена, в основном мне нужно передать функции, которые не были зарегистрированы? - person Patrick Winkler; 17.07.2013
comment
Вот скрипт: jsfiddle.net/PS4bY/1 я удалил контроллер из директивы, так как вы уже присваиваете тот же контроллер div, содержащему директиву. Я также заменил ваш шаблон простой строкой, так как там было что-то, что угловому действительно не нравилось. - person Karen Zilles; 17.07.2013
comment
спасибо :) переменные инъекции не должны быть установлены, когда они не нужны, но, например, какую переменную я должен ввести, когда? - person Patrick Winkler; 17.07.2013
comment
По сути, вы вводите услуги, которые хотите использовать. Некоторые сервисы предоставляются angular, например, $http или $q или $timeout. Некоторые услуги вы определите сами. $scope не является службой и, следовательно, не может быть внедрен, хотя $rootScope является. - person Karen Zilles; 17.07.2013

Имейте в виду, что вы сбрасываете контроллер...

angular.module('myApp', ['myApp.directives','myApp.controllers']);

/* Controllers */

angular.module('myApp.controllers', []) // YOU ARE RESETTING YOUR CONTROL TRY THIS

var app = angular.module('myApp', ['myApp.directives','myApp.controllers']);
    app.controller......
person Tyler Canton    schedule 19.06.2014