0

我正在尝试将属性指令添加到使用 ng-options 的选择中:

<select ng-model="item.Subcategory" ng-options="subcategory.Name as subcategory.Name for subcategory in GetSubcategories(item.Category)" monitor></select>

目前,它没有做任何有意义的事情:

angular.module("monitor", [])
.directive("monitor", function()
{
    var directive =
    {
        restrict: "A",
        scope:
        {
        },
        controller: function($scope)
        {
            console.log("I exist");
        }
    };

    return directive;
});

该指令似乎正在工作,因为我看到使用该指令的每个项目都有一个“我存在”,但它选择丢失了它的选项。

有了指令,我可以在 HTML 中看到它作为选择的唯一选项:

<option value="?" selected="selected"></option>

与此相反,当不使用指令时:

<option value="0" selected="selected">Cats</option>
<option value="1">Dogs</option>

为什么我的指令会破坏 ng-options?

谢谢你。

4

1 回答 1

0

这里可能存在几个问题,其中任何一个都可能是问题的原因。

根据AngularJS Developer Guide on Directives

如果同一元素上的多个指令请求一个新范围,则只会创建一个新范围。

您正在为您的指令创建一个新的隔离范围,它可能会覆盖其他指令的范围,包括 ng-options。

此外,您应该记住,控制器参数会创建一个与其他指令共享的新控制器:

控制器构造函数。控制器在预链接阶段之前被实例化,并与其他指令共享(参见 require 属性)。这允许指令相互通信并增强彼此的行为。

除非您想使用您的指令与其他指令共享数据,否则您应该避免创建控制器。

您的指令是否有任何理由无法在简单的链接函数中完成它需要做的事情?

于 2013-08-24T00:19:27.603 回答