2015-12-23 37 views
-1

ng-controller指令有兩種實例化控制器的方法。香草和controller as語法。控制器如何確定它被調用的方式並相應地調整其行爲?確定控制器As控制器的語法

例如:

<div ng-controller="myController" > 
    <p> {{message}} World </p> 
</div> 

<div ng-controller="myController as myVm"> 
    <p> {{myVm.message}} World </p> 
</div> 

<div ng-controller="myController as otherVm"> 
    <p> {{otherVm.message}} World </p> 
</div> 

我怎樣才能讓我的控制器這項工作?

angular.module("myApp").controller("myController", function($scope) { 

    function usesClassSyntax() { 
     //what do i put here? 
     return true/false 
    }; 

    if (usesClassSyntax()) { 
     var vm = this; 
    } else { 
     var vm = $scope; 
    }; 

    vm.message = "Hello"; 
}); 

回答

3

通過使用控制器作爲語法我們只是在我們的範圍內創建一個新的變量..

angular.module("myApp").controller("myController", function($scope) { 
 

 
    function usesClassSyntax() { 
 
    //i think this will help 
 
    if (typeof $scope.myVm != 'undefined') 
 
     return true; 
 
    else 
 
     return false 
 
    }; 
 

 
    if (usesClassSyntax()) { 
 
    var vm = this; 
 
    } else { 
 
    var vm = $scope; 
 
    }; 
 

 
    vm.message = "Hello"; 
 
});

+0

這僅適用於'控制器myVm'。如果控制器使用不同的名稱實例化會怎麼樣?說'控制器爲otherVm'? – georgeawg

+0

您可以將'controller as'的名稱傳遞給控制器​​並檢查它 –

+0

@CodeBean如果我是正確的,但只有當控制器在DOM中顯式聲明時纔會生效。如果你使用的是像ui.router之類的東西,至少就我所知,它不會以這種方式工作。無論如何,如果您符合您的命名約定,您可以重複使用相同的「控制器名稱」。我爲每個視圖控制器使用'vc',並且只在非常罕見的情況下才會嵌套'vc's – jusopi