【问题标题】:How to inject variable into controller如何将变量注入控制器
【发布时间】:2015-09-04 19:17:14
【问题描述】:

我正在尝试开始使用 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

【问题讨论】:

    标签: javascript angularjs karma-runner


    【解决方案1】:

    您可能想尝试以这种方式编写控制器。这将使 $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 时,您将在视图中公开该属性。

    【讨论】:

    • 是的,我知道$scope 的行为。事实上,您似乎可以并行使用$scopethis(请参阅stackoverflow.com/questions/16619740/…)。假设我使用 $scope 并按照您的建议构建控制器:如何在我的测试用例中模拟 somevar 以获得另一个值?
    • @Jonny var controller = $controller('SimpleController', { $scope: $scope }); $scope.myVar = '某事'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多