2015-09-04 4 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); 
    }); 
}); 

Я много поиск Google, но это действительно сбивает с толку, потому что многие люди используют $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 = 'something' – Anonymous