Переопределить метод получения и установки свойства в $ scope - PullRequest
0 голосов
/ 17 октября 2018

Я создаю провайдера, который переопределяет сеттер и геттер для свойства в $scope.Поставщик посчитает, сколько раз свойство будет изменено.

Я максимально упросту код, чтобы было легче сосредоточиться на проблеме.

Контроллер

[...]

export default function(myTracker) {
    $scope.user = 'test';
    mytracker.track($scope, 'user');
}

Поставщик

[...]
export default function myTrackerProvider() {
    [...]
    this.$get = function() {

        var myTracker = {};

        myTracker.track = function (scope, reference) {

            Object.defineProperty (scope, reference, {

                _ref: scope[reference],

                get: function() {
                    return this._ref;
                }

            });

            console.log(scope[reference]);
        }
}

Я уверен, что мне нужно использовать другую переменную, такую ​​как _ref, чтобы избежать циклических вызовов, но я не понимаюпочему это не работает таким образом.Почему после _ref: scope[reference], scope[ref] не определено?

Обновление: если я пытаюсь запустить это, консоль в конце выводит неопределенное значение.

1 Ответ

0 голосов
/ 18 октября 2018

Я решил эту проблему следующим образом:

[...]
export default function myTrackerProvider() {
    [...]

    var counterGets = 0;
    var counteerSets = 0;

    this.$get = function() {

        var myTracker = {};

        myTracker.track = function (scope, reference) {

            scope._ref = scope[reference];

            Object.defineProperty (scope, reference, {

                get: function() {
                    counterGets++:
                    console.log("get calls: ", counterGets);
                    return this._ref;
                },

                set: function(value) {
                    counterSets++;
                    console.log("get calls: ", counterSets);
                    this._ref = value;
                }

            });


        }
}

Моя проблема заключалась в том, что Я настоял на том, чтобы поместить временную переменную в Object.defineProperty функцию , пока она НЕ возможно.единственными допустимыми параметрами являются те, которые перечислены в ссылке MDN, предоставленной @Heretic Monkey.Кроме того, console.log должен быть помещен в функции (очевидно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...