Javascript 我能看电视上的态度变化吗?

Javascript 我能看电视上的态度变化吗?,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我可以监视指令中属性的更改吗 我有这样的想法: <online-wathers></online-watchers> 它向在线连接的用户显示视频广播,并需要广播id。显然,如果没有此属性,它将无法工作。 此视频广播不是在文档准备就绪时开始的,而是在发布者确实希望启动它时开始的。当他启动时,后端会给我广播id 现在,当api返回broadcast-id时,我只是将其附加到DOM中,并使用broadcast id=“xx” $(".online-watchers-con

我可以监视指令中属性的更改吗

我有这样的想法:

<online-wathers></online-watchers>

它向在线连接的用户显示视频广播,并需要广播id。显然,如果没有此属性,它将无法工作。 此视频广播不是在文档准备就绪时开始的,而是在发布者确实希望启动它时开始的。当他启动时,后端会给我广播id

现在,当api返回broadcast-id时,我只是将其附加到DOM中,并使用broadcast id=“xx”

$(".online-watchers-container")
      .html($("<online-watchers broadcast-id='"+broadcast.id+"' />"));
$(".chat-container")
      .html($("<chat broadcast-id='"+broadcast.id+"' />"));
$(".request-container")
      .html($("<live-requests broadcast-id='"+broadcast.id+"'></live-requests>"));

// compile directives
angular.bootstrap(angular.element("online-watchers, chat, live-requests"), ['MyApp']);
$(“.online watchers容器”)
.html($(“”);
$(“.chat容器”)
.html($(“”);
$(“.request容器”)
.html($(“”);
//编译指令
angular.bootstrap(angular.element(“在线观察者、聊天、实时请求”),['MyApp'];
但是是否有任何内部方法可以监视添加或更改属性?所以在页面加载时,我已经在DOM中使用了,当我得到带有broadcastId的响应时,我只需将属性添加到DOM中的元素中,指令就会对其作出反应

拜托,如果你把它当作狗屎代码,我会非常感谢你展示一些更好的解决方案的例子

谢谢。

是的,你可以

function MyDirective() {
    return {
        link: function (scope, iElement, iAttrs) {
            scope.$watch(iAttrs.scopeProp, function (val) {
                console.log("prop: " + val);
            });
            iAttrs.$observe("interpolated", function (val) {
                console.log("interpolate: " + val);
            });
        }
    }
 }


有关更多示例,请查看:

我建议您从阅读本手册开始。你现在做了很多错事。对于问题的核心部分:(部分:属性)属性部分,以$observe开头的示例是您正在查找的indeedNope,您可以使用指令中的当前范围$watch。这也会对您有所帮助:我认为您不想将$observe与
scope prop
一起使用,因为该属性的值只是一个字符串(它不是插值的),因此它永远不会更改。控制台日志显示
prop:someId
scopeProp
的$observe回调函数将永远不会被调用。事实上,我没有,我不够小心。谢谢你的提醒。是的,最后我选择了$observe,end设置了一个类似的属性,如果我设置broadcast id=“123”,它也可以工作。这就是我想要的。谢谢你的帮助:)
<my-directive scope-prop="someId" interpolated="{{someId + 1}}"
function MyCtrl($scope) {
    $scope.someId = 12;
}