簡體   English   中英

AngularJS:范圍變量在控制器內未定義

[英]AngularJS: Scope variable undefined within controller

我在這樣的指令中創建一個新的作用域

controllersModule.directive('uploadBox', function() {
return {
    restrict: 'E',
    scope: {
        topic: '=topic',
        label: '=label'
    },
    templateUrl: '/assets/directives/uploadBox.html'
};});

並像這樣使用此指令(值-label和topic-都是值,它們存儲在兩個不同控制器中的JSON文件中)

<upload-box label="lc.getTerm('system_upload')" topic="tc.currentTopic.uID"></upload-box> 

因此,屬性標簽和主題都傳遞給新的(創建的)范圍。 現在,有趣的是,雖然我能夠訪問模板HTML文件(uploadBox.html)中的兩個值

<div ng-controller="DropUploadCtrl">
    <button class="btn btn-success" dropzone="dropzoneConfig">
        <!-- label is correctly shown -->
        {{ label }}
    </button>

    <!-- this link works fine: Evaluates to something like aaa/54dg54...SHA128-Hash...G4FX-->
    <a ng-href="aaa/{{ topic }}">BB</a>
</div>

從DropUploadController內部只能訪問標簽值。

controllersModule.controller('DropUploadCtrl', ['$scope',function($scope) {
var that = this;

console.log($scope.label); // this is working fine
console.log($scope.topic); // this is undefined

// some more stuff here

}]);

我知道范圍是為特定控制器創建的,您不能直接在兩個控制器之間共享范圍變量。 但是,我認為這不是問題,因為我可以使用標簽值。 但是,我分別在哪里錯代碼中的錯誤呢?

非常感謝你

編輯:

控制器內rootScope的輸出

console.log("$scope::>"); 
console.log($scope.label); 
console.log($scope.topic); 
console.log("$rootScope::>") 
console.log($rootScope.label); 
console.log($rootScope.topic); 

看起來像這樣:

"$scope::>" 
"I'm a label" 
undefined 
"$rootScope::>" 
undefined 
undefined 

此外,該值在指令的鏈接函數中未定義

Edit2:已找到解決方案! 另一個控制器初始化時,tc.currentTopic.uID中的值未填充。 這就是為什么表達式{{topic}}可以正常工作的原因,因為它的值在幾毫秒后又被更改了,因此再次對其求值。 我現在直接通過$ routeParams獲取數據。

指令具有孤立的范圍。 由於您添加了:

 scope: {
        topic: '=topic',
        label: '=label'
    },

它創建了一個孤立的范圍。 但是,角度文檔說: ==attr在本地范圍屬性和通過attr屬性的值定義的名稱的父范圍屬性之間建立雙向綁定。 如果未指定attr名稱,則假定屬性名稱與本地名稱相同。 給定<widget my-attr="parentModel">和的范圍小部件定義: { localModel:'=myAttr' }則小部件范圍屬性localModel將反映的值parentModel上的父范圍。 parentModel任何更改都將反映在localModel ,對localModel任何更改都將反映在parentModel

連結這里

首先,如果您運行console.log(scope.label); 在指令的鏈接函數中(您現在還沒有,必須添加它),它是否具有價值?

其次,您似乎希望指令更​​改父控制器范圍內的值。 有時,執行此操作時可能會發生奇怪的事情。 此答案中 ,建議將這些值包裝在控制器中的一個對象中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM