2016-09-09 64 views
-1

我注意到scope.watch只有在值發生變化時纔會觸發。現在爲了激發scope.watch每次我這樣做:scope.watch在設置值時觸發

var module = angular.module('myapp', []); 

module.controller("TreeCtrl", function($scope) { 


    $scope.changeValue = function(){ 
     $scope.name = new Date(); 
    }; 

}); 

module.directive("tree", function($compile) { 
    return { 
     restrict: "E", 
     template:'<div>sample</div>', 
     link : function(scope, elm, $attrs) { 
      scope.$watch('name', function(newVal, oldVal) { 
         console.log(scope.userName);    
        }); 
     } 
    }; 
}); 

即$ scope.name = new Date();

是否有任何其他方式來捕獲scope.watch每當設置變量。

我fidddle是http://jsfiddle.net/xxkgxLr9/34/

是scope.watch正確的方法呢?

我的目標是從控制器每當一個範圍變量設置

回答

1

如果可能的話只能通過setter函數來設置變量,你可以試試這個時候火了一段代碼指令:

var module = angular.module('myapp', []); 

module.controller("TreeCtrl", function($scope) { 

    $scope.changeValue = function(){ 
     $scope.updateName(new Date()); 
    }; 

}); 

module.directive("tree", function($compile) { 
    return { 
     restrict: "E", 
     template:'<div>sample</div>', 
     link : function(scope, elm, $attrs) { 
      scope.updateName = function (newVal) { 
       console.log(newVal); 
      }; 
     } 
    }; 
}); 
+0

通過這樣做,指令/控制器正在變得緊密耦合。控制器不應該知道指令中駐留的方法。 – Raghav

2
var module = angular.module('myapp', []); 

module.controller("TreeCtrl", function($scope) { 


    $scope.changeValue = function(){ 
     $scope.name = new Date(); 
     console.log($scope.name); 
    }; 

}); 

module.directive("tree", function($compile) { 
    return { 
     restrict: "E", 
     template:'<div>sample</div>', 

     link : function($scope, elm, $attrs) { 
      $scope.$watch('userName', function(newVal, oldVal) { 
         console.log($scope.userName);  
       console.log($scope.name); 
        }); 
     } 
    }; 
}); 
+0

你能分享一下你分享的代碼和我在問題中發佈的內容之間有什麼區別? – Raghav

+0

似乎你只是將「範圍」更改爲「$範圍」,我很抱歉,不會做任何魔術。 – Raghav

+0

http://jsfiddle.net/Anvesh2727/xxkgxLr9/39/ 當範圍值改變時,它會觸發$ scop。$ watch並在控制檯中輸出新的範圍值和當前日期 –

2

按鈕和指令元素的作用域不同。你的代碼需要修改。不應將$ compile作爲參數賦予指令函數。在控制器

數據傳遞使用範圍指令:{「名」:「@」}

 `http://jsfiddle.net/bandhavya/xxkgxLr9/35/` 

這裏隨時觀看變量名稱被更改時觸發。

+0

#Raghav讓我知道這個解決方案幫助你與否 – vbharath

相關問題