Five players scored for the Blues, who limited Anaheim to 13 shots, the fewest in a game by any team this season.
"If we play hockey like that, we're going to win our share of games," St. Louis coach Craig Berube said.
WATCH: [All Blues vs. Ducks highlights]
Zach Sanford, Vladimir Tarasenko, Oskar Sundqvist, Tyler Bozak and Sammy Blais had goals for the Blues (22-22-5). Rookie Jordan Binnington made 12 saves and is 5-1-1 in his first seven NHL decisions.
Daniel Sprong scored and John Gibson made 26 saves for the Ducks (21-21-9), who haven't won at home since defeating the Dallas Stars 6-3 on Dec. 12. Anaheim enters the 2019 Honda NHL All-Star Weekend 2-10-4 in its past 16 games since a 4-2 road win against the Pittsburgh Penguins on Dec. 17.
The Ducks ended a 12-game losing streak, the longest in their history, with a 3-0 win at the Minnesota Wild on Thursday and made four trades in three days last week. They won back-to-back games against the Wild and New Jersey Devils, but have been outscored 8-1 in consecutive losses to the New York Islanders and Blues.
"The bottom line is, we had a team come in here and outwork our hockey club tonight," Ducks coach Randy Carlyle said. "We're not going to accept that."
The Blues scored five straight goals after the Ducks took a 1-0 lead on Sprong's goal at 6:44 of the first period.