@Filoret256
начинающий JS developer

Как правильно создать новый экземпляр сервиса для контроллера?

Всем привет,

смотрю
https://github.com/mgechev/angularjs-in-patterns#s...

сделал такой код в main.js:

angular
    .module('app',[])
    .factory('TestSrv', function(){
         var 
            buf,
            factory= {
                setBuf: setBuf,
                getVal: getVal
            };

         return factory;

         function setBuf(val){
            buf = val;
         };

         function getVal(){
            console.log(buf);
         };


    })
    .controller('main',function(TestSrv){
        var srv = new TestSrv();
        srv.getVal();
        srv.setBuf('fff');
        srv.getVal();

    })
    .controller('main2',function(TestSrv){
        var srv = new TestSrv();
        srv.getVal();
        srv.setBuf('fff1');
        srv.getVal();

    });


в index.html
<html lang="en" ng-app="app">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        <div ng-controller='main' >
        </div>
        <div ng-controller='main2' >
        </div>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js"></script>
        <script src="./js/main.js"></script>
    </body>
        
</html>


ругается на строчку
var srv = new TestSrv();
ошибка:
TypeError: object is not a function

странно, в примере на github-e, все так же или я все же делаю что-то не так?
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Почитайте про функции-конструкторы. Вы не можете применить new к хэш-мэпе. http://learn.javascript.ru/object-methods#функция-...

Что до вашей задачи... Все сервисы в ангуляре поставляются в единственном экземпляре. Если вам нужно что бы у разных контроллеров сервисы могли хранить разные состояния, либо реализуйте самостоятельно шаблон фабрики и нджектите в контроллеры непосредственно фабрику сервиса, либо реализуйте что-то типа registry.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы