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.