Выражение не работает в представлении, заданном службой в AngularJS - PullRequest
0 голосов
/ 25 апреля 2020

Я застрял при попытке получить доступ к представлению с выражением, которое явно не работает. У меня есть служба:

angular.module('myApp', []).service('myService', function($timeout){
    this.sayHello = function(name) {
        $timeout(function(){
            alert('Hi, I am...' +name);
        }, 3000);
    };
});

Контроллер:

angular.module('myApp.controllers', [])
.controller('MyController', function(myService) {
    myService.sayHello('AngularJS Service');
});

Просмотр

<div ng-controller="MyController">{{sayHello}}</div>

В представлении у меня есть:

{{sayHello()}}

Что я делаю не так?

1 Ответ

0 голосов
/ 25 апреля 2020

Сервисная функция не связана с контроллером, поэтому представление ее не находит. Сделайте это:

angular.module('myApp.controllers', [])
.controller('MyController', function(myService) {
    this.sayHello = myService.sayHello;
});

Чтобы связать с this вместо $scope, вам также потребуется синтаксис controllerAs в представлении, например as c1:

<div ng-controller="MyController as c1">
    {{ c1.sayHello() }}
</div>

Привязки функций в представлении будут срабатывать несколько раз.

...