Angularjs 更改对象时未更新ng bind span';s属性

Angularjs 更改对象时未更新ng bind span';s属性,angularjs,Angularjs,在下面的代码中,我在单击“tab”元素时更改了对象的属性,但是没有更新相应的ngbind范围。我需要调用一些函数来更新视图吗 HTML: 第一个问题:您没有将控制器绑定到应用程序。 您需要cf.controller('Application',Application)。 此外,您还需要在该span和tabpanel指令的父级上使用HTML格式的ng controller=“Application” 第二个问题:更改事件中的范围变量后,单击需要更改的事件 scope.$apply()让Angula

在下面的代码中,我在单击“tab”元素时更改了对象的属性,但是没有更新相应的ngbind范围。我需要调用一些函数来更新视图吗

HTML:


第一个问题:您没有将控制器绑定到应用程序。 您需要
cf.controller('Application',Application)。
此外,您还需要在该
span
tabpanel
指令的父级上使用HTML格式的
ng controller=“Application”

第二个问题:更改
事件中的范围变量后,单击需要更改的
事件
scope.$apply()
让Angular知道某些更改,它需要
$digest

你可以看看我的版本

这对我很有用。只是缺少一点范围。在那里应用$apply

如果您发现自己在使用“$apply已在进行中”,可能需要查看一下

如果要将值更改为单击的值,我将执行以下操作:

scope.$parent.selector.val = attrs.tab;
<tabpanel selector="obj">
  <div tab="junk">junk</div>
  <div tab="super">super</div>
</tabpanel>
与之相反:

scope.$parent.selector.val = "newthing";
然后您可以将标记更改为如下所示:

scope.$parent.selector.val = attrs.tab;
<tabpanel selector="obj">
  <div tab="junk">junk</div>
  <div tab="super">super</div>
</tabpanel>

废旧物品
超级的

希望有帮助

你有一些答案,但我非常怀疑你是否需要这些指示。通常,对$scope.apply()的需求意味着一种不太理想的方法。只有在使用非角度代码时才需要(就像一个在angular的控制之外运行的第三方库。你确定没有指令就不能完成你所需要的吗?我给你举了一个选项卡的例子,只在视图和控制器之间使用数据绑定。非常简单。你可以做比仅使用数据绑定更复杂的事情。非常感谢@m59,这只是一个小问题我粘贴在这里的代码片段。实际上,您的选项卡组件似乎也是一种更简单的方法。我将尝试一下。控制器的目的是将数据绑定到视图,就像这样。您可以说$scope是视图的数据表示形式。类似于
$scope.selectedTab
的内容不是关于dom操作,而是关于视图表示形式基于数据(所选内容),因此不需要特殊指令。
<tabpanel selector="obj">
  <div tab="junk">junk</div>
  <div tab="super">super</div>
</tabpanel>