Sean Monahan had a goal and an assist for the Pacific Division-leading Flames, who are 6-0-2 in their last eight on the road. Blake Coleman and Elias Lindholm also had goals for Calgary in regulation and Dan Vladar stopped 31 shots.
The Ducks trailed 3-1 in the second period before rallying back. Rickard Rakell scored with 36 seconds remaining in the period on a slap shot and Vinni Lettieri evened it 2:04 into the third with a one-timer from the left faceoff circle off Trevor Zegras’ pass.
Sonny Milano also had a goal for Anaheim and John Gibson made 33 saves.
Monahan had his first multi-point game since Nov. 14 at Ottawa. After Milano opened the scoring 54 seconds into the second with a tip-in, Monahan fed a perfect pass to Coleman in front of the net to tie it three minutes later.
Later in the period, Monahan snapped a 12-game drought and gave Calgary a 3-1 lead with 4:50 remaining when Trevor Lewis found him alone in front of the net. It was Monahan’s 207th career goal with the Flames, which moved him into seventh place in franchise history.
The Flames took advantage of a Ducks turnover midway through the second to take a 2-1 lead when Lindholm had a give-and-go goal after taking the pass from Gaudreau.
Milano’s goal ended Vladar’s shutout streak at 140:54. Vladar, who is the Flames’ backup goalie, came into the game with a 1.57 goals-against average and .946 save percentage.
Anaheim announced early in the third period that forward Adam Henrique suffered a lower-body injury and would not return. Henrique took a big hit from Erik Gudbranson near the end of the first period, but he did play most of the second.
Flames: At Vegas on Sunday.
Ducks: At Washington on Monday night to open a five-game trip.