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