2015-12-30 130 views
-1

我意识到有类似的问题已经在这个SO上,但我找不到解决我的问题。访问控制器中的指令值

我有以下指令,提取光标叶(模糊)的输入框键和值:

.directive('updateOneField', function() { 
    return { 
    restrict: 'A', 
    scope: [], 
    link: function(scope, element, attr) { 

     element.bind('blur', function() { 
     var key = attr.ngModel.split('.'); 
     key = key[key.length - 1]; 

     // Get the input value 
     var value = element[0].value; 


     }); 
    } 
    }; 
}); 

这将潜在地跨越多个控制器使用,所以我的问题是我如何访问来自任何控制器的keyvalue值?

+0

http://www.undefinednull.com/2014/02/11/mastering-the-scope-of-a-directive-in-angularjs /我刚刚发现这个博客感谢你的问题,它真的真的解释** scope **在指令和指令非常清楚。看看,感谢upvote :) – katmanco

回答

0

如果我理解正确,您正试图访问ngModel的值,这样做的最“有效的方法”就是在您的指令中要求ngModelController;

return { 
    restrict: 'A', 
    require: 'ngModel', 
    link: function(scope, element, attrs, ngModelCtrl) { 
     element.bind('blur', function() { 
      var model = ngModelCtrl.$modelValue; 
     }); 
    } 
}; 

您可以找到有关ngModelController here

0

有更多的信息,您可以在控制器范围变量传递给你的指令,并使用这个变量来从指令访问值。

<input type="text" update-one-field my-scope="myVariable" /> 

这里,myVariable是控制器的变量。现在

$scope.myVariable = {}; 

,更新您的指令就是这样,

.directive('updateOneField', function() { 
    return { 
     restrict: 'A', 
     scope: { 
      myScope: '=' 
     }, 
     link: function(scope, element, attr) { 

      element.bind('blur', function() { 
       var key = attr.ngModel.split('.'); 
       key = key[key.length - 1]; 

       // Get the input value 
       var value = element[0].value; 

       // Assign key and value to controller variable 
       scope.myScope = {}; 
       scope.myScope.Key = key; 
       scope.myScope.Value = value; 
      }); 
     } 
    }; 
}); 

现在,你可以从控制器就像访问key & value

// Code inside your controller 
$scope.myVariable.Key; // Get key from the directive 
$scope.myVariable.Value; // Get value from the directive 

希望这会有所帮助。如果您对此有任何疑问,请随时添加评论。

0

你在指令声明一个错字:

.directive('updateOneField', function() { 
    return { 
    restrict: 'A', 
    // her -------------------------------> scope: [], 
    scope : {}, 
    link: function(scope, element, attr) { 

     element.bind('blur', function() { 
     var key = attr.ngModel.split('.'); 
     key = key[key.length - 1]; 

     // Get the input value 
     var value = element[0].value; 


     }); 
    } 
    }; 
}); 
相关问题