3

それに応じてテンプレートを変更するために、ユーザーが自分自身であるかどうかを確認するために、Angularjs でディレクティブを使用しようとしています。

例えば

    <li is-self >
        <a  ng-show="logged_in" ng-href="/users/{{user.public_id}}"> Settings </a>
    </li>    

確かに、これはこの問題に対する最善のアプローチではないかもしれませんが、現時点ではこれ以上の方法は考えられません。

しかし、私が抱えている問題は、ディレクティブ内で http リクエストを実行できないことです。したがって、それをコントローラーに入れて、スコープ関数として参照する必要がありました。

ユーザーコントローラー

    $scope.isSelf = ->
        $http({method: 'GET', url: '/is_self/' + $routeParams.id}).
        success((data, status, headers, config) ->
            if data
                $scope.logged_in = true
        ).
        error((data, status, headers, config) ->
            console.log(data)
        )

ユーザーモジュール

    userModule.directive('isSelf', () ->
      link: ($scope) ->
        $scope.isSelf()

ただし、この手法は問題を引き起こします。ディレクティブが複数のファイルと複数のコントローラーで使用されているためです。最も適切な解決策は、ディレクティブ内でリクエストを実行することだと思いますが、 $http を渡すことができないように見えるため、それは機能しません。

私の理想的な解決策は、私が好きだったものの組み合わせです

userModule.directive('isSelf', () ->
   link: ($scope, $http) ->
      $http({method: 'GET', url: '/is_self/' + "3f8686589ad"}).
          success((data, status, headers, config) ->
              if data
                  $scope.logged_in = true
          ).
          error((data, status, headers, config) ->
              console.log(data)
          )
)

私は明らかにフレームワークにかなり慣れていないので、どんな助けでも大歓迎です。

4

1 に答える 1

-1

さて、私は解決策を見つけました。これは同じ問題を抱えている人のためのものです。

さて、もう少しいじくり回した後、私はそれを間違った方法で行っていたと思うことに気づきました。私は代わりに以下の提案に従ってサービスを使用しました。誰かが同じ問題を抱えていて疑問に思っていた場合の最終的なコードは次のとおりです。

モジュール

userModule = angular.module('users', ["ngResource"])

userModule.factory('User', ['$resource', '$http', ($resource, $http) ->
    User = $resource "/users/:id", id: "@id",
        update: method: "PUT"
        destroy: method: "DELETE"

    User::isSelf = (id, cb) ->
        $http.get('/is_self/' + id).success (data) ->
            if data
                cb true

    User
])

コントローラ

StatsShowCtrl = ($scope, $location, $routeParams, User) ->
    User.get id: $routeParams.id, (user) ->
        self.original = user
        $scope.user = new User(self.original)

        $scope.user.isSelf $routeParams.id, (self) ->
            if self
                $scope.logged_in = true

HTML

<li ng-show="logged_in"> <a ng-href="/users/{{user.public_id}}"> Settings </a></li>
于 2013-02-11T16:41:12.273 に答える