2016-07-19 9 views
0

どの角度指令バインドコントローラのサービスデータ

controller: 
 
service.checkSub(function(data){ 
 
    $scope.showSub = data.subscribe? false : true; 
 
}) 
 

 
directive: 
 
app.directive('showSub', function() { 
 
    return { 
 
     restrict: 'E', 
 
     replace: true, 
 
     scope: { 
 
      showSub: '=show' 
 
     }, 
 
     templateUrl: '<div data-ng-show="show">test</div>', 
 
     link: function(scope, element, attrs) { 
 
      console.log(scope.showSub); // undifined 
 
      if(scope.showSub) { 
 
       scope.show = true; 
 
      }else { 
 
       scope.show = false; 
 
      } 
 
     } 
 
    } 
 
});
<show-sub show="showSub"></show-sub>

なぜディレクティブでscope.showSub未定義ある、と私はディレクティブを制御するためにそれを使用したいですか?私はそれをどうすればいいのですか?

+1

これは 'templateUrl'の代わりに' template'でなければなりません、いいえ? – developer033

+0

コントローラーの内部には「サービス」とは何ですか?それはangularjsサービスですか? 'checkSub'関数の目的は何ですか?それは 'サービス'の機能ですか? –

+0

** $ scope.showSub = true; **のようなディレクティブの親コントローラに値を与えようとすると、console.log(scope.showSub)というディレクティブでその値が得られます。そのため、あなたの指示はサービスに問題はありません –

答えて

0

...のようになりますscope.showSubは、コントローラのスコープのshowSubがまだ記入されていないため、ディレクティブにロードするときに定義されていません。あなたはそれを修正するために何をすることができます。

  • 変更templateUrl
  • templateに変更 ng-show="show" ng-show="showSub"
  • にあなたが直接あなたのテンプレートでスコープ変数にバインドできるよう(それは、必要とされていないlink機能を失います)

コード:

app.directive('showSub', function($timeout) { 
    return { 
     restrict: 'E', 
     replace: true, 
     scope: { 
      showSub: '=show' 
     }, 
     template: '<div data-ng-show="showSub">test</div>', 
     link: function(scope, elem) { 
      // this function isn't needed, but to show you it gives undefined due to the async call 
      console.log(scope.showSub); // undefined 
      $timeout(function(){ 
       console.log(scope.showSub); // true 
      }, 1500); 
     } 
    } 
}); 

Here is a jsfiddle

0

お客様の指令は問題ありませんが、サービスには問題があります。

service.checkSub(function(data){ 
    $scope.showSub = data.subscribe? false : true; 
}) 

$ scope.showSubは、親スコープにする必要があります。

あなたは$ scope.showSub内のデータを持っていることを確認し

0

あなたは範囲によってshowSubの値を取得することができます。$ parent.showSub

だからあなたのコードは

app.directive('showSub', function() { 
    return { 
    restrict: 'E', 
    replace: true, 
    scope: { 
     showSub: '=show' 
    }, 
    templateUrl: '<div data-ng-show="show">test</div>', 
    link: function(scope, element, attrs) { 
     console.log(scope.$parent.showSub); 
     if(scope.$parent.showSub) { 
      scope.show = true; 
     }else { 
      scope.show = false; 
     } 
    } 
    } 
});