Weaver (4-5) threw 118 pitches while allowing four hits and walking four. Scott Downs retired the final batter in the seventh and Dane De La Rosa worked around a one-out single in the eighth.
After Kevin Jepsen gave up Oakland's only run in the ninth, Ernesto Frieri came on to record the final two outs and claim his 23rd save.
The Angels had lost their three games prior to the All-Star Game break. Oakland had won two in a row.
All four Los Angeles runs were given up by A.J. Griffin (8-7), who turned in a five-inning effort.