Angularのng-clickでコントローラ関数への呼び出しが機能しない
質問
ある変数を別のコントローラに渡す必要があります。ListCtrlに関連した以下のようなコードがあります。
<a href="#items" data-router="article" ng-click="changeListName('metro')">
リンク先は別のコントローラであるItemCtrlです。
ItemCtrlに変数を渡したい。SharedPropertiesというサービスを使おうと思いました.
service('sharedProperties', function () {
var list_name = '';
return {
getListName: function() {
return list_name;
},
setListName: function(name) {
list_name = name;
}
};
});
リンクがクリックされたら、angularのクリックイベントを呼び出して、次の関数をトリガーしています。
$scope.changeListName = function(name) {
sharedProperties.setListName(name);
};
しかし、ng-clickは私の共有プロパティの値を変更しないようです...。
UPDATE
ng-clickで起動する関数の中にアラートを入れてみたところ、当然のようにアラートが起動しました。
しかし、このように関数を書くと.
$scope.changeListName = function(name) {
sharedProperties.setListName(name);
};
うまくいかない・・・『sharedProperties.setListName(name);』が実行されていないような・・・。
関数の外にダミーの名前(例:metro)を付けると動きますが...。
UPDATE 3
いろいろと試してみましたが、この関数に問題があることは間違いありません。
$scope.changeListName = function(list_name) {
sharedProperties.setListName(list_name);
};
なぜこのようなことが起こるのか、何か心当たりはありますか?
どのように解決するのですか?
あなたはおそらく ngHref ディレクティブを使うべきです。
<a ng-href='#here' ng-click='go()' >click me</a>
以下はその例です。 http://plnkr.co/edit/FSH0tP0YBFeGwjIhKBSx?p=preview
<body ng-controller="MainCtrl">
<p>Hello {{name}}!</p>
{{msg}}
<a ng-href='#here' ng-click='go()' >click me</a>
<div style='height:1000px'>
<a id='here'></a>
</div>
<h1>here</h1>
</body>
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
$scope.go = function() {
$scope.msg = 'clicked';
}
});
あなたが使っているライブラリでこれが動作するかどうかは分かりませんが、少なくともngClick関数をリンクして使用することができます。
** アップデート **
セットして、サービスでうまく動作するデモを紹介します。
http://plnkr.co/edit/FSH0tP0YBFeGwjIhKBSx?p=preview
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope, sharedProperties) {
$scope.name = 'World';
$scope.go = function(item) {
sharedProperties.setListName(item);
}
$scope.getItem = function() {
$scope.msg = sharedProperties.getListName();
}
});
app.service('sharedProperties', function () {
var list_name = '';
return {
getListName: function() {
return list_name;
},
setListName: function(name) {
list_name = name;
}
};
});
* 編集
レビュー https://github.com/centralway/lungo-angular-bridge をご覧ください。 また、他のリンクにアクセスしたときにページが完全にリロードされる場合は、共有プロパティをlocalstorageやクッキーに保存する必要があることに注意してください。
関連
-
[解決済み】Angularjs accordion ng-click on panel-header
-
[解決済み] AngularJSでiframeのsrc属性を変数から設定する方法
-
[解決済み] Angular 1.2+ で ng-bind-html-unsafe を複製するために $sce.trustAsHtml(string) を使用するにはどうしたらよいですか?
-
[解決済み] AngularJSでkeypressイベントを使用するには?
-
[解決済み] エラーです。[$injector:unpr] 不明なプロバイダです。ルートプロバイダ
-
処理されない例外が発生しました。Angular 実行中のプロジェクトで NGCC に失敗しました。
-
[解決済み] Angularjsを使用してローカルストレージにデータを保存するにはどうすればよいですか?
-
[解決済み] ngInject'を本当に書く必要があるのか?
-
[解決済み] あるAngularJSのコントローラが別のコントローラを呼び出すことはできますか?
-
[解決済み】Angular JSでコントローラ間のデータを渡す?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angular ng-repeat エラー "リピータ内の重複は許可されません。"
-
[解決済み] AngularJSのグローバル変数
-
[解決済み] ReferenceError: Angularは定義されていません。
-
[解決済み] ng-repeat内で$indexを使用して、クラスを有効にしてDIVを表示するにはどうすればよいですか?
-
[解決済み] AngularJsでng-Cloakディレクティブを実際に使用する方法とは?
-
角型グローバル確認ボックス
-
[解決済み] Angularjsを使用してローカルストレージにデータを保存するにはどうすればよいですか?
-
[解決済み] angularJSの::の意味するところ
-
[解決済み] AngularJSで$scope.$watchと$scope.$applyを使用するにはどうすればよいですか?
-
[解決済み] ng-repeat内のng-click関数にパラメータを追加しても、うまくいかないようです。