2015-09-04 102 views
-3

我想開始使用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一起工作?

回答

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"; 
    .... 
}]); 

當您使用$範圍中,將使得該屬性在視圖中公開。

+0

是的,我知道'$ scope'的行爲。實際上,它似乎可以並行使用'$ scope'和'this'(請參閱http://stackoverflow.com/questions/16619740/angular-should-i-use-this-or-scope)。假設我使用'$ scope'並按照您的建議構建控制器:我如何在我的測試用例中模擬somevar以獲得另一個值? – Jonny

+0

@Jonny var controller = $ controller('SimpleController',{$ scope:$ scope}); $ scope.myVar ='東西' – Anonymous