2

後、私は、コントローラの範囲内でA $ http.get更新指令範囲コントローラサービスコール

app.controller('myController', function ($scope, mService) { 

    $scope.chair; 

    myService.getData().then(function (data) { 
     $scope.chair = data.chairID; 
    }); 

}); 

を行うサービスを呼び出すコントローラーを持って、私は私がしようとしていたためにディレクティブを持っています$ scope.chairの値を渡す:

<section ng-controller="mycontroller"> 

    <my-directive data-chair="chair"></my-directive> 

</section> 

そしてmyDirective.js内

restrict: 'E', 
replace: true, 
templateUrl: 'app/some-file.html', 
scope: { 
    chair: '=' 
}, 
controller: [ '$scope', function ($scope) { 
    alert('got chair : ' + $scope.chair); 
    .... 

しかし、上記の場合、私は警告時に未定義と表示されます( 'got chair:' + $ scope.chair)。 contoller内

、私は椅子ハードコーディング場合:

app.controller('myController', function ($scope, mService) { 

    $scope.chair = 'hello'; 

    myService.getData().then(function (data) { 
     $scope.chair = data.chairID; 
    }); 

}); 

私のディレクティブはhelloが表示されます。

+1

どのバージョンのAngularを使用していますか? – Makoto

+0

v1.4.0を使用していただきありがとうございます。 –

答えて

0

この動作するはずです:あなたはディレクティブでそれにアクセスしようとすると

.directive('myDirective', function() { 
    return { 
    restrict: 'E', 
    replace: true, 
    templateUrl: 'app/some-file.html', 
    scope: { 
     chair: '=' 
    }, 
    link: function(scope, element, attrs) { 
     alert('got chair : ' + scope.chair); 
    } 
    } 
}); 
+0

ありがとうございます。しかし、私はコントローラ内でリンクにアクセスする必要があります –

1

「椅子」の内部変数が設定されていない可能性があります。また、サービスを介して値を非同期的にロードするように見えます。

あなたの指示に時計を添付する必要があります。ウォッチに渡すコールバックは、 "chair"スコープ変数の値を変更した後の次の角度$ digestフェーズで呼び出されます。

... 
controller: [ '$scope', function ($scope) { 
    $scope.$watch('chair', function(chairValue) { 
     if (chairValue === undefined) return; 

     // There is a value. 
     alert('got chair : ' + $scope.chair); 
    }); 
}] 

このコードでは、値が変更されるたびにコールバックが呼び出されます。

値の変更を処理したくない場合は、値が安定した後に時計をクリアしてください(は未定義とは異なります)。多くのバインディングやウォッチがある複雑なビューを使用すると、パフォーマンスが向上します。

... 
controller: [ '$scope', function ($scope) { 
    var unwatch = $scope.$watch('chair', function(chairValue) { 
     if (chairValue === undefined) return; 

     // There is a value. 
     alert('got chair : ' + $scope.chair); 
     unwatch(); 
    }); 
}]