Angularjs 范围的分配是';不按指令工作

Angularjs 范围的分配是';不按指令工作,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我在下面有一个指令,它对scope元素部分进行了更改。data,我稍后将其赋值,以更新UI上的数据。但是,这种方法适用于功能change\u subnav,但不适用于交换机(将注释添加到代码中)。为什么会这样?此更改的代码相同。非常感谢您的帮助。如果我需要添加更多信息,请告诉我 Plunker- 更新 .directive('selectSubnav', function ($parse) { return { restrict: 'A', link: f

我在下面有一个指令,它对scope元素
部分进行了更改。data
,我稍后将其
赋值
,以更新UI上的数据。但是,这种方法适用于功能
change\u subnav
,但不适用于交换机(将注释添加到代码中)。为什么会这样?此更改的代码相同。非常感谢您的帮助。如果我需要添加更多信息,请告诉我

Plunker-

更新

.directive('selectSubnav', function ($parse) {
    return {
        restrict: 'A',
        link: function (scope, element, attr) {
            var currentScope = scope;
            var change_subnav = function (subnav) {
                if (scope.active_tab == 'user_exercises') {
                    var sections = {};
                    sections[subnav] = scope[scope.active_tab][subnav];
                } else {

                }

                return sections;
            };

            $(element).on('click', function () {
                $(element).parent().children().removeClass('active');
                $(element).addClass('active');

                var sections;

                switch (attr.selectSubnav) {
                    case 'All':
                        // this doesn't work
                        sections = currentScope[currentScope.active_tab];
                        break;
                    default:
                        sections = change_subnav(attr.selectSubnav);
                        break;
                }

                currentScope.$apply(function () {
                    $parse('sections.data').assign(currentScope.$parent, sections);
                });
            });
        }
    }
})

您已经可以在链接函数中访问scope,因此,不要像这样更新scope.sections.data:

$parse('sections.data').assign(scope.$parent, sections);
scope.sections.data = sections;
您可以简单地执行以下操作:

$parse('sections.data').assign(scope, sections);
或者,最好直接更新,如下所示:

$parse('sections.data').assign(scope.$parent, sections);
scope.sections.data = sections;

您已经可以在链接函数中访问scope,因此,不要像这样更新scope.sections.data:

$parse('sections.data').assign(scope.$parent, sections);
scope.sections.data = sections;
您可以简单地执行以下操作:

$parse('sections.data').assign(scope, sections);
或者,最好直接更新,如下所示:

$parse('sections.data').assign(scope.$parent, sections);
scope.sections.data = sections;

一个包含html和控制器代码的plunker会很有帮助。嗨,我已经添加了plunker。尝试尽可能地复制场景plunker与您的html和控制器代码的上下文将是有益的。嗨,我已经添加了plunker。尝试尽可能地复制场景
$parse('sections.data')。分配(范围,节)这起作用了<代码>scope.sections.data=节这将不起作用,因为该指令不调用范围分解,我们必须显式地调用它。谢谢<代码>$parse('sections.data')。分配(范围、节)这起作用了<代码>scope.sections.data=节这将不起作用,因为该指令不调用范围分解,我们必须显式地调用它。谢谢