我正試圖學習在AngularJS中構建自定義指令。目前我正在使用AngularJS 1.5.8。「控制器爲」與隔離範圍內的指令不隔離
我試圖創建一個帶有分離範圍一條指令的一個例子,其中控制器範圍不可見,這樣我可以選擇性地通過將其添加到暴露的東西「範圍:{}」。在這個例子中,我得到的期望是'Name:Street:',因爲ctrl.customer應該對指令不可用。然後,我會將「customer:'='」添加到「範圍:{}」,然後我會得到「名稱:David Street:123 anywhere street」。不幸的是,我寫了這個指令後得到了「名稱:大衛街:任何地方的街道123」。
東西我曾嘗試:
- 設置 「bindToController:真正的」
- 刪除 「範圍:{}」 和設置 「bindToController:{}」(所以我加上 「顧客: '='」 )
- 設置「bindToController:false」(不妨吧?)
- 加載html後反覆敲擊shift-F5,確保我沒有緩存舊文件。
testScope.js:
var app = angular.module('scopeModule',[]);
app.controller('Controller',[function(){
var vm = this;
vm.customer = {
name: 'David',
street: '123 anywhere street'
};
}]);
app.directive('sharedScope', function() {
return{
scope:{},
template: 'Name:{{ctrl.customer.name}} Street:{{ctrl.customer.street}}',
controller: 'Controller',
controllerAs: 'ctrl',
bindToController: true
};
});
index2.html:
<!doctype html>
<html ng-app="scopeModule">
<body>
<shared-scope></shared-scope>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<script src="testScope.js"></script>
</body>
</html>
你錯了。隔離範圍的要點是確保指令範圍與外部範圍隔離,即使用該指令的視圖的範圍。如果指令有自己的控制器,並且控制器公開數據,那麼指令當然可以訪問這些數據。 –
或者說這個指令有點不同,控制器就是它的範圍,所以無論你放在它裏面什麼都可以直接使用 – maurycy