Baltimore starter Cole Hammel had lost just once this season, but he gave up eight runs in 3 1/3 innings while falling to 8-2. His earned run average jumped from 2.61 to 3.29.
Morales had two RBI in the third inning and one each in the fourth and seventh. Two unearned Los Angeles runs scored in the fifth when a grounder by Morales was misplayed for an error by second baseman Brian Roberts.
The Angels broke things open with a six-run fourth. They have won three in a row and six out of seven.
Jered Weaver (8-1) coasted to the win in his second start since coming off the disabled list. He gave up a run on six hits with six strikeouts in 6 2/3 innings.