2017-07-28 2 views
0

Je souhaite modifier une variable dans une fabrique angularjs (1.x) avec un événement click. Après cela, le bouton de pause devrait apparaître. Pourriez-vous s'il vous plaît me aider:Fonction ng-click dans l'usine angularjs

Le lien avec ng-cliquez sur:

<li ng-click='navPlayMusic()'> 
    <a class="glyphicon glyphicon-play music-control"></a> 
</li> 
<li ng-show="musicControl.playTitle === true" ng-click='navPauseMusic()'> 
    <a class="glyphicon glyphicon-pause music-control"></a> 
</li> 

EDIT:

Le contrôleur:

music.controller('musicController', function($scope, $rootScope, $location, musicControl) { 
    ... 
    $scope.musicControl = musicControl; 
    $scope.navPlayMusic = function() { 
    musicControl.playMusic(); 
    } 
    ... 
}); 

L'usine:

music.factory('musicControl', function() { 
return { 
    playTitle: false, 
}; 
this.playMusic = function() { 
    return { 
    playTitle: true 
    }; 
}; 
}); 
+2

Vous ne semblez pas injecter votre factory 'musicControl' dans votre contrôleur – Phil

+0

@Phil Merci pour votre réponse. Maintenant, j'ai injecté musicControl dans le contrôleur mais ça ne fonctionne toujours pas. – Liberty

+0

Changez l'usine pour retourner la fonction 'playMusic'. Les clients d'une usine peuvent uniquement accéder aux propriétés de l'objet renvoyé. Les propriétés de l'objet 'this' sont ignorées. – georgeawg

Répondre

0

Vous pouvez essayer cette

usine:

music.factory('musicControl', function() { 
     var _flags = { //Note: we intentionally declare properties here for easy to track how many flag we have in factory (optional) 
      playTitle: false 
     } 
     return { 
      flags: _flags, 
      playMusic: playMusic 
     }; 

     function playMusic(dummyParam) { 
      //handle play music logic 
      //dummyParam will be 5 if called from HTML. 

      //after done, enable the flag 
      _flags.playTitle = true; 
     }; 
    }); 

Controller:

music.controller('musicController', function($scope, $rootScope, $location, musicControl) { 

     //... 

     $scope.musicFlags = musicControl.flags; //map only property that we need to use. More than that is just make code hard to understand 
     $scope.navPlayMusic = musicControl.playMusic; //just need to map function 

     //... 

    }); 

HTML:

<li ng-click='navPlayMusic()'> 
     <a class="glyphicon glyphicon-play music-control"></a> 
    </li> 
    <li ng-show="musicFlags.playTitle === true" ng-click='navPauseMusic(5)'> 
     <a class="glyphicon glyphicon-pause music-control"></a> 
    </li> 
+0

Cela fonctionne. Merci beaucoup. J'ai beaucoup appris avec cette réponse. – Liberty

+0

Vous êtes les bienvenus :) –

+0

Une question de plus: Comment puis-je ajouter des paramètres aux fonctions et les donner du code html à l'usine? – Liberty

0

vous devez renvoyer la référence de la fonction d'usine dans l'objet de retour

music.factory('musicControl', function() { 
return { 
    playTitle: false, 
    playMusic : playMusic 
}; 
function playMusic() { 
    return { 
    playTitle: true 
    }; 
}; 
}); 
0
//try this 
music.factory('musicControl', function() { 
return { 
    playTitle: false, 
    playMusic : function() { 
     return { 
     playTitle: true 
     }; 
    }; 
    }; 
}); 
0

Vous pouvez essayer ..

usine:

music.factory('musicControl', function() { 

     var playTitle = false; 
     function playMusic() { 
      return playTitle = true; 

     } 

     return { 
      playMusic: playMusic 
     } 
    }); 
contrôleur

:

$scope.isPause = false; 
$scope.navPlayMusic = function() { 
    $scope.isPause = $scope.musicControl.playMusic(); 
} 

HTML:

<li ng-click='navPlayMusic()'> 
<a class="glyphicon glyphicon-play music-control"></a> 
</li> 
<li ng-show="isPause === true" ng-click='navPauseMusic()'> 
<a class="glyphicon glyphicon-pause music-control"></a> 
</li>