Angularjs控制器功能我有一個創建它的孤立範圍屬性,並回調函數AngularJs指令:傳遞參數,從指令
.directive('testButton', [function() {
return {
restrict: 'A',
controller: 'TestDirectiveController as vmDirective',
scope: {
myCallBack:'&myCallBack',
myVariable: '=myVariable'
},
template: function (element, attrs) {
return '<button data-ng-click="vmDirective.onButtonClicked(2)">Set myVariable = 2</button>';
}
};}])
在指令按鈕被點擊並執行onButtonClicked
功能。然後設置一個範圍變量並調用$scope.myCallBack
函數。
回調函數被執行並執行以下操作: console.log($scope.linkedVariable);
問題是$scope.linkedVariable
尚未更新,在那個階段的$scope.linkedVariable
仍然是以前的值。
當我包裹在setTimeout
上面的代碼正確的值被檢索:setTimeout(function(){console.log($scope.linkedVariable)}, 2000);
我的問題是,如何將正確的值傳遞給onCallBack
功能。
請參見下面的完整代碼示例:
angular.module('application',[])
.directive('testButton', [function() {
return {
restrict: 'A',
controller: 'TestDirectiveController as vmDirective',
scope: {
myCallBack:'&myCallBack',
myVariable: '=myVariable'
},
template: function (element, attrs) {
return '<button data-ng-click="vmDirective.onButtonClicked(2)">Set myVariable = 2</button>';
}
};
}])
.controller("TestDirectiveController", ['$scope', function($scope){
var self = this;
self.onButtonClicked = function(value){
$scope.myVariable = value;
$scope.myCallBack();
};
}])
.controller("TestController", ['$scope', function($scope){
var self = this;
$scope.linkedVariable = null;
self.onCallBack = function(){
console.log($scope.linkedVariable);
setTimeout(function(){console.log($scope.linkedVariable)}, 2000);
};
}])
HTML:
<div data-ng-controller="TestController as vm">
<div data-test-button="" data-my-call-back="vm.onCallBack()" data-my-variable="linkedVariable"></div>
</div>
的jsfiddle:http://jsfiddle.net/ff5ck0da/1/
我不想使用'setTimeout',因爲它似乎有點哈克。 –
@TjaartvanderWalt我同意看到我的更新回答 –
這似乎有點細緻的東西如此微不足道?沒有更多內置的方式嗎? –