Former Edmonton Oiler Andrew Cogliano scored his career high 21st goal of the season with 5:19 left in the third period to break a 2-2 deadlock.
Finnish Olympic bronze medalist Sami Vatanen led the Ducks in scoring with two assists. Vatanen picked up assists on the Ducks' first two goals by Nick Bonino and Mathieu Perreault.
The Flames had an excellent second period as Brian McGrattan and Jiri Hudler beat Ducks' goaltender Jonas Hiller, but the Flames were unable to hang on to their one goal lead in the third period.
With the win, the Ducks break the century mark in points for the third time in franchise history (at 101 points) and currently are in third place in the Western Conference behind the St. Louis Blues and San Jose Sharks.
The Flames meanwhile drop to 30-36-7 and next play the New York Rangers on Friday night in Calgary.