我正在尝试使用文件管理器在formfield中插入图像链接,但是数据没有提交到控制器的作用域。

当我设置默认值时,该值不变。

形式如下:

<!--show while loading-->
<div ng-if="showItem && !itemLoaded">
    <i class="fa fa-spinner fa-spin fa-3x"></i>
</div>

<!--show when error loading-->
<div ng-if="showItem && listError">
    {{ 'ERROR_LOADING' | translate }}
</div>


<!--show when loaded-->
<div ng-if="showItem && itemLoaded && !listError">
    <div class="menu-item-background">
        <input type="hidden" name="cat_id" value="{{item.cat_id}}" ng-model="item.cat_id">
        <div class="form-group">
            &nbsp;&nbsp;<label for="cat_parent_id">{{'MENUPARENT' | translate }}</label>&nbsp;
            <select name="cat_parent_id" id="cat_parent_id" ng-model="item.cat_parent_id">
                <option value="">--{{ 'DOSELECT' | translate }}</option>
                <option ng-repeat="option in parentOptions.options" value="{{option.cat_id}}">{{option.cat_name}}</option>
            </select>
        </div>
        <div class="form-group">
            &nbsp;&nbsp;<label for="cat_lang_id">{{'MENULANG' | translate }}</label>&nbsp;
            <select name="cat_lang_id" id="cat_lang_id" ng-model="item.cat_lang_id">
                <option value="">--{{ 'DOSELECT' | translate }}</option>
                <option ng-repeat="option in langOptions.options" value="{{option.lang_id}}">{{option.lang_name}}</option>
            </select>
        </div>
        <div class="form-group">
            &nbsp;&nbsp;<label for="cat_name">{{'CATNAME' | translate }}</label>&nbsp;
            <input type="text" id="cat_name" name="cat_name" placeholder=" {{'CATNAME' | translate }}" ng-model="item.cat_name">
        </div>
        <div class="form-group">
            &nbsp;&nbsp;<label for="cat_image">{{'CATIMAGE' | translate }}</label>&nbsp;
            <input type="text" id="cat_image" name="cat_image" placeholder=" {{'CATIMAGE' | translate }}" ng-model="item.cat_image" ng-click="openWindow()">&nbsp;&nbsp;<i class="fa fa-info-circle" title="Klik in het tekstvak hiernaast om de file manager te openen. Blader naar het goede bestand en dubbelklik om deze te selecteren en in het tekstveld te plaatsen."></i>
        </div>
        <div class="form-group">
            &nbsp;&nbsp;<label for="cat_order">{{'MENUORDER' | translate }}</label>&nbsp;
            <input type="text" id="cat_order" name="cat_order" placeholder=" {{'MENUORDERNR' | translate }}" ng-model="item.cat_order">
        </div>
        <div class="form-group">
            &nbsp;&nbsp;<label for="cat_active">{{'MENUACTIVE' | translate }}</label>&nbsp;
            <input type="checkbox" id="cat_active" name="cat_active" value="1" ng-model="item.cat_active" ng-true-value="'1'" ng-false-value="'0'">
        </div>
        <div>
            <button type="button" class="btn btn-default" ng-click="cancel()">{{'BUTTON_CANCEL' | translate }}</button>&nbsp;
            <button type="button" class="btn btn-default" ng-click="safeCategory(item.cat_id, item.cat_parent_id, item.cat_lang_id, item.cat_name, item.cat_image, item.cat_order, item.cat_active)">{{'BUTTON_SAFE' | translate }}</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </div>
    </div>
</div>


我用angular打开了弹出窗口,它触发了常规的javascript window.open函数,弹出窗口运行良好,链接放置在formfield中,但从未到达范围。

问题似乎在于,当以编程方式输入数据时,范围没有被更新。
此外,如果未手动输入数据,则不会触发ng-change。
我希望有一个解决方法。

有任何想法吗?

最佳答案

好吧,我找到了解决方案。

因为我从指令中删除了作用域,所以必须在指令标记上调用作用域。在这种情况下为app-category-detail。

我使用了有问题的filemanager的回调功能,该功能看起来像这样。

function responsive_filemanager_callback(field_id) {

    // Function to determine the scope of the directive tag.
    // I used this because I set the scope of the directive back to the controller
    // therefor the controller is never explicitly mentioned in the HTML as
    // ng-controller='controllername', so getElementByID is useless in this case
    // With this function I can find every scope on every ""visible"" directive tag.
    // In this case "app-category-detail"

    sc = function (el) {
        return angular.element(el).scope();
    };

    // First check which directive is there
    if($('app-category-detail')) {
        // call for the scope
        fnd = sc('app-category-detail');
        // set the value of the variable in the scope.
        fnd.item.cat_image = $("#cat_image").val();
    }
}


我希望这对以后的人有所帮助,因为我花了两天的大部分时间来解决这个问题。

关于javascript - 带有filemanager的AngularJS打破了formfield的范围?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33858446/

10-09 17:44