77

変数を別のコントローラーに渡す必要があります。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 は共有プロパティの値を変更していないようです...

アップデート

ng-click によってトリガーされる関数内にアラートを配置すると、アラートがトリガーされます。

ただし、次のように関数を書くと:

$scope.changeListName = function(name) {
    sharedProperties.setListName(name);
};

機能しません...「sharedProperties.setListName(name);」のように見えます 実行されません...

ダミーの名前(メトロなど)で関数の外に置くと、機能します..

更新 3

私は複数のことを試しましたが、問題はこの機能にあると確信しています:

$scope.changeListName = function(list_name) {
    sharedProperties.setListName(list_name);
};

なぜこれが起こっているのか分かりますか?

4

3 に答える 3

105

おそらく、 ngClickとともに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を確認してください。Lungo と angular の使用方法について説明しています。また、別のリンクを参照しているときにページが完全にリロードされる場合は、共有プロパティを localstorage や Cookie に保持する必要があることに注意してください。

于 2013-07-03T20:44:00.157 に答える
5

angular構成でコントローラーを定義するときにエイリアスを使用します。例: 注: ここでは TypeScript を使用しています。

コントローラに注意してください。これには、homeCtrl というエイリアスがあります。

module MongoAngular {
    var app = angular.module('mongoAngular', ['ngResource', 'ngRoute','restangular']);

    app.config([
        '$routeProvider', ($routeProvider: ng.route.IRouteProvider) => {
            $routeProvider
                .when('/Home', {
                    templateUrl: '/PartialViews/Home/home.html',
                    controller: 'HomeController as homeCtrl'
                })
                .otherwise({ redirectTo: '/Home' });
        }])
        .config(['RestangularProvider', (restangularProvider: restangular.IProvider) => {
        restangularProvider.setBaseUrl('/api');
    }]);
} 

で、使い方は・・・

ng-click="homeCtrl.addCustomer(customer)"

試してみてください..私にとってはうまくいったので、あなたにもうまくいくかもしれません... ;)

于 2014-08-31T03:28:35.097 に答える
3

エラーが発生していないか、エラーについて言及していると思います。その場合は、href属性値を削除して、コードが実行される前にページが移動しないようにしてください。Angular では、href属性を空白のままにしても問題ありません。

<a href="" data-router="article" ng-click="changeListName('metro')">

また、何をしているのかわかりませんdata-routerが、それでも適切な結果が得られない場合は、それが原因である可能性があります。

于 2013-07-03T20:02:08.470 に答える