Mike Trout added a two-run double in the seventh to put the Angels up 6-1, but the Twins didn't go away quietly.
They loaded the bases with two outs in the ninth against Ernesto Frieri, who gave up a single and issued two walks, and Joe Mauer cleared them by ripping a double into the left-field corner off Joe Smith.
Smith struck out Kendrys Morales swinging to end the game and collect his seventh save of the season.
The Angels completed a three-game sweep and wrapped up a perfect homestand with a season-best sixth straight victory.
Weaver (8-6) earned his first win since June 6 after a solid seven-inning outing. He allowed one run on eight hits, all singles, walked one and struck out six.
Mauer and Chris Parmelee each had three hits for Minnesota, which has lost eight straight on the road.
Ricky Nolasco (4-6) was charged with six runs on 11 hits over six-plus innings and suffered his first loss since May 25.