2015-10-07 61 views
0

我是angularjs中較新的。我只是嘗試使用自定義指令更新輸入txt值。但我不能。在這裏我顯示了我的代碼我做錯了這段代碼。有人幫我解釋它是如何工作的。如何使用angularjs中的自定義指令更新輸入文本值

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

 
//myApp.directive('myDirective', function() {}); 
 
//myApp.factory('myService', function() {}); 
 
myApp.controller('MyCtrl',MyCtrl); 
 
function MyCtrl($scope) { 
 
    $scope.name = 'Superhero'; 
 
    $scope.myTime = '10:59'; 
 
} 
 

 

 
myApp.directive('myDirective', function() { 
 
    return { 
 
     restrict: 'A', 
 
     require: '?ngModel', 
 
     link: function (scope, element, attrs, ngModel) { 
 
      scope.$watch(attrs.ngModel, function (v) { 
 
       console.log('value changed, new value is: ' + v); 
 
       ngModel.$setViewValue('11') 
 
       //scope.ngModel = '11' 
 
       
 
      }); 
 
     } 
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-controller="MyCtrl"> 
 
    Hello, {{name}}! 
 
    
 
    
 
    <input type="text" my-directive ng-model="myTime" name="customTime"> 
 
    
 
</div>

回答

2

您應該將myApp模塊中註冊MyCtrl控制器像下面。

​​

如果您需要將文本字段值更新爲某一期望值,一旦你與更新的觀察者使用$ setViewValue()完成的,你需要調用$render()以及上NgModelController

link: function (scope, element, attrs, ngModel) { 
    scope.$watch(attrs.ngModel, function (v) { 
     console.log('value changed, new value is: ' + v); 
     ngModel.$setViewValue('11'); 
     ngModel.$render(); 
    }); 
} 

這裏是一個Pen來檢查此更改。

+0

是的工作。謝謝 – cfprabhu

+0

我以爲你只是想在你的監視器中捕獲更新後的值,如果你需要將文本字段更新爲某個期望的值,則需要在$ setViewValue()後面調用'$ render()' 。更新我的答案以反映這一點。 – Arkantos

+0

很高興能有所幫助:) – Arkantos

相關問題