2015-08-26 11 views
1

我用一個指令訪問數據混淆,特別是當我定義我的車型,如:如何訪問模型的數據控制器內部指令與這些已定義與「這個」?

vm = this; 
vm.myModel = "hello"; 

我的指令:

function mySelectedAccount(){ 
     return { 
     restrict: 'A', 
     link: function(scope, element, attrs) { 
      element.on('click', function() { 
      console.log(scope.myModel);     
      }); 
     } 
     } 
    } 

因爲我沒有使用$範圍內,如何通過指令訪問我的控制器中定義的「myModel」?如果我嘗試訪問它與範圍參數在我的指令我得到未定義。

感謝您的時間

回答

1

在這裏,您vm變量是指你的控制器實例。在您的範圍內,您將控制器上下文註冊到vm變量中。

所以,你可以這樣做:

控制器

(function(){ 

function Controller($scope) { 

    var vm = this; 
    vm.myModel = 'toto'; 

} 

angular 
.module('app', []) 
.controller('ctrl', Controller); 

})(); 

指令

(function(){ 

    function directive() { 
    return { 
     link:function(scope, element, attrs){ 
     element.on('click', function() { 
      //Access to vm property wrap into the scope 
      console.log(scope.vm.myModel); 
     }); 
     } 
    }; 
    } 

angular 
    .module('app') 
    .directive('directive', directive); 

})(); 

然後在你的HTML,您可以使用controllerAs語法:

HTML

<body ng-app='app' ng-controller="ctrl as vm"> 
    <div directive>{{vm.myModel}}</div> 
    </body> 

你可以在這裏看到Working Plunker

+1

太感謝你了!這對你的回答非常有幫助! :) – fablexis

相關問題