我對茉莉花相對較新。我讀了下面的代碼教程:
angular.module('moduleX', []).controller('HomeCtrl',function($scope) {
$scope.showData = function(data) {
$scope.$broadcast('showData', data);
};
});
下面是測試:
beforeEach(inject(function ($rootScope, $controller) {
scope = $rootScope.$new();
$controller('HomeCtrl', {
$scope: scope
});
spyOn(scope, '$broadcast');
}));
it('should call $broadcast', function() {
scope.showData();
expect(scope.$broadcast).toHaveBeenCalled();
});
我的問題是如何一切正常?如果scope = $ rootScope。$ new();那麼我假設範圍變成了一個全新的空範圍,並且範圍上沒有showData方法,那麼scope.showData()如何工作?我認爲$控制器只有幫助實例化一個新的HomeCtrl,但它沒有分配給任何變量(我期望看到類似於var homeCtrl = $controller('HomeCtrl', {$scope: scope});
)我不確定在這種情況下它是否與範圍變量有關?
一些注意事項:我做一些的console.log看到的範圍變量:
scope = $rootScope.$new();
console.log("scope before",scope)
$controller('HomeCtrl', {
$scope: scope
});
console.log("scope after",scope)
我可以看到,現在有showData在「後的範圍」,所以$控制器已修改原來的範圍變量。我不確定爲什麼,並認爲這種方式有點不直觀。