2016-04-24 63 views
0

我在僞指令中傳遞了一個變量col,定義了col: '='。 對象包含一些數組,在這些數組內部有一個函數。 功能指的是從我的控制變量,它看起來像這樣:將對象傳遞給僞指令不允許使用全局變量

function (params) { 
    return $scope.function(params); 
} 

col變量被傳遞到大指令包含一個子指令,並且子指令執行。

它從一個名爲VM {random number here}的文件中引發一個錯誤,它說$scope是未定義的。

如何讓它從我的控制器運行,而不是從虛擬JS文件運行?

回答

1

如果您需要傳遞功能,那麼您必須爲該作業創建服務/工廠。要在指令或組件中使用,我認爲。

不要忘記服務是單身和工廠實現非標準工廠模式。

如果全局意味着窗口變量或函數不需要注入this.windows。 ....做這項工作。

關於。

+0

我給多一點背景。該指令是一個表格指令,用於顯示數據。我傳遞的函數是一個行樣式函數,用於樣式行。全局變量是來自我的控制器的其他樣式規則,對於指令的每次使用都是不同的。如果我使用這種服務,我的代碼將不會被組織,因爲我們需要爲每個表創建一個樣式函數。 (這意味着我將一個函數從我的模塊中分離出來,轉移到一個更全局的組件上,將來可能會造成升級時的混亂 - 就我所見而言) – Amit

0

打電話給你的指令,在你宣佈你的控制器
,只是從你的指令,將數據傳遞到您的控制器中使用
這樣您就可以訪問你的控制器相同的呈現模板的指令數據的功能你的HTML模板

指令

.directive('myDir', function() { 
    return { 
    'restrict': 'AE', 
    'templateUrl': '/directive_page.html', 
     'scope': { 
      'col': '=', 
      'onSelect': '=' 
     } 
    } 
    'link': function() { 
     // use onselect method here to use values 
    } 
} 

控制器

.controller('myController', function() { 
    $scope.setValueFromDirective = function (value) { 
     // write your logic to fetch data 
    }; 
}); 

HTML

<div data-my-dir="" col="//pass value you want in directive" data-on-select='setValueFromDirective(value)'> 
</div> 

我希望這將有助於你

相關問題