javascript - 从指令设置 ngModel 时的范围问题

标签 javascript angularjs

我有一个看起来像这样的指令:

var myApp = angular.module('myApp',[])
    .directive("test", function() {
      return {
        template: '<button ng-click="setValue()">Set value</button>',
        require: 'ngModel',
        link: function(scope, iElement, iAttrs, ngModel) {
          scope.setValue = function(){
            ngModel.$setViewValue(iAttrs.setTo);
          }
        }
      };
    });

问题是,如果我在页面中多次使用此指令,则仅在最后声明的指令上调用 setValue 。显而易见的解决方案是使用 scope: {} 隔离范围,但这样 ngModel 就无法在指令之外访问。 ​

这是我的代码的 JSFiddle:http://jsfiddle.net/kMybm/3/

最佳答案

对于这种情况,ngModel 可能不是正确的解决方案。这主要是为了将值绑定(bind)到表单来执行诸如将它们标记为脏和验证之类的事情...

在这里,您可以只使用来自隔离范围的双向绑定(bind),如下所示:

app.directive('test', function() {
   return {
      restrict: 'E',
      scope: { 
         target: '=target',
         setTo: '@setTo'
      },
      template: '<button ng-click="setValue()">Set value</button>',
      controller: function($scope) {
          $scope.setValue = function() {
              $scope.target = $scope.setTo;
          };
          //HACK: to get rid of strange behavior mentioned in comments
          $scope.$watch('target',function(){});
      }
   };
});

关于javascript - 从指令设置 ngModel 时的范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045980/

相关文章:

javascript - Onclick 使用 jQuery 在另一个 div 中更改图像源

javascript - 如何使用 useReducer 更新嵌套数组?

javascript - Angular JS 中的验证码实现

javascript - 使用 ng-Route 刷新页面的任何其他方式

javascript - Angular 中的路由更改后 Socket.io 停止工作

javascript - 如何在弹出窗口中显示 jquery 验证错误消息?

c# - ASP.Net:回发后如何维护文本框状态

javascript - AngularJS ng-点击 : How to pass row data to modal pop up textboxes

angularjs - 如何将 ng-repeat 中的索引发送到函数中?

mysql - 如何使用 mvc spring 将 JSON 数组插入 MySQL