Juan Castro had three RBI, including a go-ahead two-run single, and Jacque Jones homered in the Twins' 7-5 victory Monday night.
The Twins have won seven of their last eight games.
"Everything is starting to click right now," said Torii Hunter, who had three hits. "We're playing good ball."
Carlos Silva (7-3) gave up four runs, eight hits and struck out a season-high six in 6 1/3 innings to win his fourth consecutive decision.
"I was hitting my corners very good," Silva said. "You have to know where you're going to throw those pitches because every time you make a mistake they're going to hurt you."
Joe Nathan pitched the ninth for his 24th save in 26 chances.
"Silva pitched very good against a very tough lineup that can score some runs," Twins manager Ron Gardenhire said. "Carlos changed speeds and used a lot more breaking balls on these guys. Against this team you have to use your other pitches."
Castro singled to right in the sixth inning, giving the Twins a 5-3 lead. Vladimir Guerrero homered in the bottom of the inning, but Jones led off the eighth with a shot to center field, increasing the Twins' lead to 6-4.
"I was just trying to make some contact," Castro said. "We got hits at the right time."
John Lackey gave up a two-out RBI single to Justin Morneau in the fourth on a ball that didn't leave the infield. Castro's RBI single in the sixth came with two outs.
"I felt like I threw the ball better than the results are going to show," said Lackey, who had never faced Castro before. "It's just frustrating when you work hard and pitch well for a pretty good stretch, and then something like that can put you right back where you started."
The Angels closed to 6-5 in the eighth on a RBI double by Maicer Izturis, but Juan Rincon struck out Dallas McPherson to end the inning.
Hunter made it 7-5 in the ninth with a two-out RBI double.
Lackey (6-3) gave up five runs and eight hits in 5 2/3 innings, struck out six and walked two. The right-hander lost for the first time since May 9, a 3-0 defeat against Cleveland.
"John had good stuff and he did make some terrific pitches to get out of some innings, but he had some chances to put some guys away and couldn't make a pitch," Angels manager Mike Scioscia said. "There were just some little things that added up."
Darin Erstad hit a two-run homer in the first for the Angels, who had won three straight.
Castro's RBI double in the fourth put the Twins ahead 3-2 and helped him snap an 0-for-10 streak. Minnesota got two other runs in the inning on a double by Jones and Morneau's single.
Los Angeles tied the game at 3-all in the fifth on a hit by Adam Kennedy.
Kennedy was ejected in the ninth by plate umpire Tom Hallion for arguing a called strike.
Silva has not allowed a walk in his last three starts, and he leads the majors in fewest walks per nine innings. ... The Twins improved to 24-27 on the Fourth of July; the Angels fell to 21-27. ... The Angels have not committed an error in the last 14 games, tying the club record set from June 14-28, 1991. ... The Twins lead the season series 3-1. ... Angels OF Steve Finley, on the DL with a strained right shoulder, will take live batting practice in the next couple of days and likely return after the All-Star break.