访问控制器中的指令值

时间:2015-12-30 09:11:07

标签: angularjs

我已经意识到在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值?

3 个答案:

答案 0 :(得分:0)

如果我理解正确,最正确的角度方式&#34>,您正试图访问ngModel的值。这样做是在你的指令中要求ngModelController,如此;

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

您可以找到有关ngModelController here

的更多信息

答案 1 :(得分: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

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

答案 2 :(得分: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;


      });
    }
  };
});