我可以在指令中注意更改属性吗?

时间:2013-03-24 19:46:00

标签: javascript angularjs angularjs-directive

我可以在指令中注意更改属性吗?

我有这样的事情:

<online-wathers></online-watchers>

它显示在线连接的用户到视频广播并需要广播ID。显然没有这个属性它将无法工作。 此视频广播不是在文档就绪时启动,而是在发布者实际想要启动时播放。当他开始时 - 后端给了我广播ID。

现在我只是在api返回broadcast-id时将它附加到带有broadcast-id =“xx”的DOM。

$(".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']);

但是有没有内部方法来观看添加或更改属性?因此,在页面加载时,我将在DOM中使用&lt; online-watchers&gt;&lt; / online-watchers&gt; ,当我通过broadcastId获得响应时,我只需在DOM中添加属性并且指令对其作出反应。

如果您将其视为狗屎代码,我将非常感谢您展示一些更好的解决方案。

感谢。

1 个答案:

答案 0 :(得分:1)

是的,你可以

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);
            });
        }
    }
 }

<my-directive scope-prop="someId" interpolated="{{someId + 1}}"

function MyCtrl($scope) {
    $scope.someId = 12;
}

有关更多示例,请查看:How to get evaluated attributes inside a custom directive