如何将变量注入控制器

时间:2015-09-04 19:17:15

标签: javascript angularjs karma-runner

我正在尝试使用angular.js但我无法弄清楚如何在测试之前将一个简单的变量注入我的控制器。

这是我的控制者:

angular.module("app").controller("SimpleController", SimpleController);

function SimpleController() {
  var vm = this;
  vm.myVar = 1;
  vm.getMyVar = function() {
    return vm.myVar;
  };
}

我的测试如下:

describe("SimpleController", function() {
  var vm;

  beforeEach(module('app'));

  beforeEach(inject(function($controller, $rootScope) {
    vm = $controller('SimpleController', {
        $scope: $rootScope.$new(),
        myVar: 2
    });
  }));

  it('myVar should be 2 not 1', function() {
    expect(vm.getMyVar()).toEqual(2);
  });
});

我做了很多谷歌搜索,但这确实令人困惑,因为许多人确实在控制器中使用$scope,而不像我一样使用this。但我想注入变量也应该与this一起使用?

1 个答案:

答案 0 :(得分:0)

您可能想尝试以这种方式编写控制器。这将使$ scope可访问。

(function () {
   angular.module("app").controller("SimpleController", SimpleController);

   SimpleController.$inject = ['$scope'];
   function SimpleController($scope) {
      $scope.somevar = "something";
   }
})();

我确定你可能已经看到过这些文档,但这里有docs的链接,其中包含基础知识,至少应该让你朝着正确的方向前进。

另一种选择是这样的:

app.controller('SimpleController', ['$scope', function($scope) {
   $scope.somevar = "something";
   ....
}]);

当您使用$ scope时,您将在视图中公开提供该属性。