Возврат области из Контроллера в AngularJS

Я хочу привязать возвращаемое значение (всегда объект) контроллера к области видимости.

вместо:

$scope.test = "test"

вот так:

return {
  test: "test"
}

так что я могу использовать его, на мой взгляд, как

{{ test }}

Причина, по которой я хочу это использовать, заключается в том, что мои директивы, службы и т. Д. Все еще работают так.

(function(module) {

  var SomeFactory = function SomeFactory(

  ) {

    var test = 2;

    var getTest = function getTest() {
      return test;
    }

    return {
      getTest : getTest
    }
  }

  module.factory('someFactory', [
    SomeFactory
  ])

})(angular.module('app'))

Так что мой контроллер должен выглядеть так:

(function(module) {

  var SomeController = function SomeController(
    $state
  ) {

    var loggedIn = true;

    var isLoggedIn = function isLoggedIn() {
      return loggedIn;
    }

    return {
      isLoggedIn : isLoggedIn
    }
  }

  module.controller('SomeController', [
    '$state',
    SomeController
  ])

})(angular.module('app'))

Кто-то может помочь.

Альтернативное решение, такое как:

$scope.add({
  test: 2,
  do: function() {}
})

тоже нормально:)

Спасибо за вашу помощь

РЕДАКТИРОВАТЬ: я хочу только вернуть объект {} и этот объект доступен через декоратор или что-то еще

1 ответ

Решение

Вы можете расширить свою область действия в контроллере следующим образом:

angular
  .module("myModule", [])
  .controller("MyController", ["$scope", function($scope) {
      angular.extend(
          $scope,
          {
              test: 2,
              do: function() { return 3;}
          }
      );
  }]);

а затем использовать это так

<div ng-controller="MyController">
  {{test}}
  {{do()}}
</div>

Плункер с примером

Другие вопросы по тегам