2017-07-28 4 views
0

clickイベントでangularjs(1.x)ファクトリの変数を変更したいとします。その後、一時停止ボタンが表示されます。あなたは私を助けてもらえ:angularjsファクトリのng-click関数

NGクリックしてリンク:

<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:

コントローラ:

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

工場:

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

あなたのコントローラに 'musicControl'ファクトリを注入していないようです。 – Phil

+0

@Philあなたの答えをありがとう。今私はコントローラにmusicControlを注入しましたが、まだ動作しません。 – Liberty

+0

'playMusic'関数を返すようにファクトリを変更します。ファクトリのクライアントは、返されたオブジェクトのプロパティにのみアクセスできます。 'this'オブジェクトのプロパティは無視されます。 – georgeawg

答えて

0

戻りオブジェクトにファクトリ関数の参照を返す必要があります。

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; 
     }; 
    }); 

コントローラー:

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

これは動作します。どうもありがとうございました。この答えで多くのことを学びました。 – Liberty

+0

あなたは大歓迎です:) –

+0

もう1つ質問:ファンクションにパラメータを追加し、htmlコードからファクトリに渡すにはどうすればよいですか? – Liberty

0

あなたはあなたがこの

工場試すことができます

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

..

工場:

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

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

     } 

     return { 
      playMusic: playMusic 
     } 
    }); 

コントローラ:

$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> 
関連する問題