Hernandez (3-2) finished his performance by setting down 14 straight batters. The Mariners' ace yielded five hits while walking one batter and striking out seven.
Morales' seventh-inning single scored Kyle Seager, snapping a 2-2 deadlock.
Jesus Montero belted a two-run homer in the sixth and Seager extended his career-high hitting streak to 16 games as the Mariners won for the second time in three games against the Angels.
Los Angeles starter Joe Blanton (0-4) surrendered three runs on nine hits and four walks over six frames, striking out five.
Chris Iannetta homered for the Angels.
Ray Liotta sues skin care company over use of likeness
NBC reportedly holds celebs hostage to Jimmy Fallon's show