2

为什么 ng-model 的值不随表达式更新。在 ng-model 定义之前,值得到更新

值将在阶段 2 或阶段 3 更改后立即更新

<input type="text" name="phase1" value="{{phase2 - phase3}}" ></input>

值不会更新

<input type="text" name="phase1" value="{{phase2 - phase3}}" ng-model="phase1"></input>

所以我想写一个指令来评估指令中的表达式并将输出更新为模型,

这是html,它看起来像

<input type="text" name="phase1" ng-model="phase1" my-value="{{phase2 - phase3}}" my-model-value></input>

指示:

myApp.directive('myModelValue', function(){
return {
            restrict: 'A',
            require: 'ngModel',
            scope: {
                model: '=ngModel',
                value: '@myValue'
            },
            link: function (scope, element, attr, controller) {
                scope.model = scope.value;
            }
        };

});

该指令仅在加载时评估,但我想随着相关字段(阶段 2 和阶段 3)的变化不断更新/观察。

我可以从控制器更新值,但我想从 html 中更新。请帮助我,它可能或反对角度的工作

4

3 回答 3

2

谢谢大家,我知道我想做什么。这是我最后一个简单但有用的指令:)

app.directive('myModelValue', function () {
        return {
            restrict: 'A',
            require: 'ngModel',
            scope: {
                model: '=ngModel'
            },
            link: function (scope, element, attr, controller) {
                attr.$observe('myModelValue', function (finalValue) {
                    scope.model = finalValue;
                });
            }
        };
    });

用法:

<input type="text" ng-model="phase1" my-model-value="{{phase2 - phase3}}"></input>
<input type="text" ng-model="phase1.name" my-model-value="{{valid angular expression}}"></input>
于 2014-07-18T07:48:29.147 回答
0
This will watch the  value expression and update the same when value will change

myApp.directive('myModelValue', function(){
return {
            restrict: 'A',
            require: 'ngModel',
            scope: {
                model: '=ngModel',
                value: '@myValue'
            },
            link: function (scope, element, attr, controller) {
                scope.$watch('value',function(newValue){
                      console.log(newValue);
               });
            }
        };
});
here value is a local scope so it will watch the expression 
于 2014-07-18T06:49:41.423 回答
0

为了持续观察 phase2/3 的变化,你可以使用 $scope.$watch 函数。

像这样的东西会为你工作:

link: function (scope, element, attr, controller) {
         scope.$watchCollection('[phase1,phase2]', function() {
            //whatever you want to do over here            }

并在范围内传递 phase1 和 phase2 值

于 2014-07-18T06:51:56.190 回答