1

を始めたばかりでAngularJS、ルーティングに問題がありui-routerます。基本的に、サインインするボタンを表示するパーシャルがあります。問題は、そのボタンをクリックしても、コントローラーで対応するメソッドが呼び出されないことです。

モジュール定義:

var myapp = angular.module('myapp', ['ui.state']);

myapp.config(function($stateProvider, $routeProvider) {

  $stateProvider.state('signin', {
        url : "/", // root route
        views : {
            "signinView" : {
                templateUrl : 'signin.html'
            }
        },
        controller: function($scope) {
            $scope.auth = function() { 
        console.log("clicked");
            };
        }
        //controller: 'LoginController'
    }).state('signedin', {
        views : {
            "signinView" : {
                templateUrl : 'partials/signedin.html'
            }
        }
    });

});

signin.html:_

<button class="btn" ng-click="auth()">Sign In</button>

問題を示しているプラ​​ンカー

4

2 に答える 2

4

コントローラーの定義は、ビューの定義内にある必要があります。
コードは次のようになります。

myapp.config(function($stateProvider, $routeProvider) {

  $stateProvider.state('signin', {
        url : "", // root route
        views : {
            "signinView" : {
                templateUrl : 'signin.html',
        controller: function($scope) {
                $scope.auth = function() { 
        alert("Clicked");
        console.log("clicked");
            };
        }
            }
        }
        //controller: 'LoginController'
    }).state('signedin', {
        views : {
            "signinView" : {
                templateUrl : 'partials/signedin.html'
            }
        }
    });

プランカーはこちら

于 2013-06-29T17:04:13.243 に答える
3

私は ui-router を使用していませんが、コードをざっと見てみると、コントローラーが正しく定義されていないことがわかります。テンプレートを定義するのと同じオブジェクト リテラル内に存在する必要があります。

...
"signinView" : {
  templateUrl : 'signin.html',
  controller: function($scope) {
    $scope.auth = function() { 
      alert("Clicked");
      console.log("clicked");
    };
  }
}
...

ui-router ドキュメントはそれについて明確です。

ワーキングプランカー

于 2013-06-29T17:06:03.473 に答える