Я знаю некоторые объявления функций JavaScript. Вроде функция выражения, анонимная функция, но я не понимаю, какой синтаксис этих двух функций? Кто-нибудь может сказать мне, как называются эти две функции? Я имею в виду «манипулировать данными: функция (вход)» и «getDataById: функция (идентификатор)».

Почему оператор return может иметь этот синтаксис для возврата двух функций? Почему бы не вернуть одну функцию за один раз вместо двух? Будет здорово, если вы дадите мне несколько справочных документов? Благодарю.

app.service('MyService', function ($http, $q, $angularCacheFactory) {
    var _dataCache = $angularCacheFactory('dataCache', { 
        maxAge: 3600000 // items expire after an hour
    });
    /**
     * @class MyService
     */
    return {
        manipulateData: function (input) {
            var output;
            // do something with the data
            return output;
        },

        getDataById: function (id) {
            var deferred = $q.defer();
            if (_dataCache.get(id)) {
                deferred.resolve(_dataCache.get(id));
            } else {
                // Get the data from the server and populate cache
            }
            return deferred.promise;
        }
    };
});
0
AngularJS 8 Янв 2017 в 03:33

3 ответа

Лучший ответ

Эти функции являются просто анонимными функциями, которые оказываются значениями в объекте. Учти это:

var object = {
  add: function(x, y) {
    return x + y;
  }
};

object.add(1, 2); // = 3

Это так же, как:

function addFunction(x, y) {
  return x + y;
}

var object = {
  add: addFunction
};

object.add(1, 2); // = 3

В этих функциях нет ничего особенного, так как они являются обычными свойствами объекта.

0
Frxstrem 8 Янв 2017 в 00:42

Angular Service возвращает экземпляр сервиса, который вы привязываете к пространству имен приложения, эти функции в выражении return являются открытыми методами, с которыми можно работать. В основном объект, который содержит два метода manipulateData и getDataById.

Это похоже на это

function company() {
  let product; // This is private

  // Public Methods
  return {

    setLatestProduct: function(value) {
      product = value;
      console.log(product, ' set');
    },

    getLatestProduct: function() {
      return product;
    }
  }

}

const apple = company();
console.log(apple); // { setLatestProduct: function, getLatestProduct: function }
0
akinjide 8 Янв 2017 в 01:01

В этом случае вы не возвращаете функцию, а объект.

Когда вы определяете service в angularjs, вы должны предоставить его реализацию в обратном вызове (второй аргумент app.service) Этот обратный вызов должен возвращать методы, которые вы хотите сделать доступными для других частей вашего приложения.

Затем в контроллере или другом сервисе вы сможете написать:

app.controller("MyCtrl", ["MyService", function(MyService) {
  MyService.getDataById('an id');
}]);
0
Jspdown 8 Янв 2017 в 00:47