Angularjs指令在指令中设置范围var并在控制器中设置访问权限

时间:2016-08-24 12:24:07

标签: angularjs

您好我正在研究angularjs。我在指令中面临一个问题 我在链接/点击事件上设置了scope.user.name="amin shah" 并希望在控制器中访问它如何可能?

var dataSourceDirective = angular.module('mydirective', []);
dataSourceDirective.directive('dir', function () {
    return {
        restrict: 'C',
        scope: true,
        link: function ($scope, element, attrs) {
            element.bind('click', function () {
                    $scope.user.name ="amin shah";
                    $scope.$apply();
                    $('.sourceType_panel').hide();
                    $('#sourceType_1_panel').show();

            });
        }
    }
});

控制器代码

$scope.demo = function () {
      console.log($scope.user);`
},

2 个答案:

答案 0 :(得分:1)

您需要在指令中创建隔离范围。 给定的控制器应该是该指令的父级。

<div ng-copntroller='yourCtrl'>
<dir user="user"></dir>
</div>

在html中:

user

在控制器中,您应该初始化$rootScope.$emit('user_name_update',user);

OR

如果父母是控制者,则使用$broadcast & $emit

使用指令的链接功能,您可以使用$scope.$on('user_name_update',function(data){ console.log(user) // its should give your updated `user` object })

在控制器中你可以听这个事件

$(document).keydown(function(e) {
    switch(e.which) {
        case 37: // left
        break;

        case 38: // up
        break;

        case 39: // right
        break;

        case 40: // down
        break;

        default: return; // exit this handler for other keys
    }
    e.preventDefault(); // prevent the default action (scroll / move caret)
});

答案 1 :(得分:0)

首先,你应该纠正你的链接方法,我认为你不应该在那里需要孩子。所以你也应该在指令中删除你的范围绑定。您可以使用链接方法访问父作用域。

    app.directive('dir', function () {
    return {
        restrict: 'E',
        link: function (scope, element, attrs) {
            element.bind('click', function () {
                    scope.user.name ="amin shah";
                    scope.$apply();

            });
        }
    }
});

在您的控制器中,您可以像这样定义范围变量:

    app.controller('MainCtrl', function($scope) {

      $scope.user = {
       name: ''
     }
  });

你也应该把这个指令添加到HTML:

<dir>Element</dir>
<p>{{user.name}}</p>

这是工作plunkr你应该点击元素,而不是你可以从指令中看到你的名字,但是在父范围内

https://plnkr.co/edit/umTdfukZ22hARoLjxdL3?p=preview