动态创建的元素不触发单击事件

时间:2015-09-18 09:57:59

标签: angularjs

if (fivemiuntesHandler == null) {

            Log.d(TAG, "Location update started five minutes ..............: ");
            fivemiuntesHandler = new Handler();

            fivemiuntesHandler.postDelayed(fiveminutes, 300000);

        }

        if (thirtysecHandler == null) {
            Log.d(TAG, "Location update started five minutes ..............: "); 
            thirtysecHandler = new Handler();
            thirtysecHandler.postDelayed(thirtySec, 0);

        }


private Runnable fiveminutes  = new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub



            sharedPreferences = getSharedPreferences("user_detail",
                    MODE_WORLD_WRITEABLE);
            login_id = sharedPreferences.getString("login_id", "");
            url = sharedPreferences.getString("url", "");

            responseArray= null;
            response= null;
            try {

                URL URl;

                byte[] data;

                String lat_current_pos = null, lng_current_pos = null,address_base64 = null,lat_base64,lng_base64;



                    lat_current_pos = lat;
                    lng_current_pos=lng;





                data = gcm_id.getBytes("UTF-8");
                String gcm_base64 = Base64.encode(data);
                data = login_id.getBytes("UTF-8");
                String login_base64 = Base64.encode(data);


                if(Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE)!=0 && Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE) !=1){
                    data = getAddress(new LatLng(Double.valueOf(lat_current_pos), Double.valueOf(lng_current_pos))).getBytes("UTF-8");
                    address_base64  = Base64.encode(data);
                    }else
                    {

                        data = "LOCATION_MODE_OFF".getBytes("UTF-8");
                        address_base64 = Base64.encode(data);


                    }

                if(Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE)==0 || Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE)==1)
                {

                    data = "".getBytes("UTF-8");
                    lat_base64 = Base64.encode(data);
                    data = "".getBytes("UTF-8");
                    lng_base64 = Base64.encode(data);

                }else{
                data = lat_current_pos.getBytes("UTF-8");
                 lat_base64 = Base64.encode(data);
                data = lng_current_pos.getBytes("UTF-8");
                 lng_base64 = Base64.encode(data);

                }
                data = name.getBytes("UTF-8");
                String name_base64 = Base64.encode(data);

                data = "I".getBytes("UTF-8");
                String flag_base64 = Base64.encode(data);



                    URl = new URL(
                            getResources().getString(R.string.services_push_lat_lng));



                List<NameValuePair> liNameValuePairs = new ArrayList<NameValuePair>();

                liNameValuePairs.add(new BasicNameValuePair("login_id",
                        login_base64));
                liNameValuePairs.add(new BasicNameValuePair("gcm_id", gcm_base64));
                if(address_base64==null)
                {
                liNameValuePairs.add(new BasicNameValuePair("address", ""));
                }else
                    liNameValuePairs.add(new BasicNameValuePair("address", address_base64));    
                liNameValuePairs.add(new BasicNameValuePair("lat", lat_base64));
                liNameValuePairs.add(new BasicNameValuePair("lon", lng_base64));
                liNameValuePairs.add(new BasicNameValuePair("name", name_base64));
                if (url.contains("boss.xsinfosol.com")) {
                    liNameValuePairs
                            .add(new BasicNameValuePair("flag", flag_base64));

                }
                ApiCallingclass apiCallingclass = new ApiCallingclass();
                    responseArray = apiCallingclass.callApi(liNameValuePairs, URl);
                response = responseArray[0];
                System.out.println("5 minutes " + response +"  "+login_id);
            } catch (UnknownHostException e) {
                e.printStackTrace();

            }

            catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();

            }



            fivemiuntesHandler.postDelayed(fiveminutes, 300000);



        }
    };


private Runnable thirtySec = new Runnable() {



        @Override
        public void run() {
            // TODO Auto-generated method stub

            update_current_location_tracker uLocation_tracker = new update_current_location_tracker();
            uLocation_tracker.execute();


            thirtysecHandler.postDelayed(thirtySec, 30000);

        }

    };

我正在调用此函数来动态添加元素。但是$scope.addNew = function(){ $('.thumb-img-gallary').append("<li><span class='img-del' ng-click='delThumbImgGallaryPhoto($event)'>X</span><img class='thumb-img' src='data:image/jpeg;base64,"+imageData+"'/></li>"); } 没有被调用。

3 个答案:

答案 0 :(得分:6)

您不能只使用ng-click或任何其他指令追加元素,并期望它能够正常工作。它必须由angular编译。

关于角度docs的编译的阐述:

  

对于AngularJS,&#34;编译&#34;意味着将指令附加到HTML以使其成为交互式

竞争发生在以下两种情况之一:

  •   

    当Angular引导您的应用程序时,HTML编译器会针对DOM元素遍历DOM匹配指令

  • 在角度上下文中调用$compile服务时

所以你需要做的是首先编译它(记住在你的控制器中注入$ compile服务),然后追加它:

$scope.addNew = function(){    
    var elem = $compile("<li><span class='img-del' ng-click='delThumbImgGallaryPhoto($event)'>X</span><img class='thumb-img' src='data:image/jpeg;base64,"+imageData+"'/></li>")($scope);
    $('.thumb-img-gallary').append(elem);    
}
顺便说一下,记住它可以在控制器中完成任何DOM操作。 angular有指令。

答案 1 :(得分:3)

angular对您新添加的元素一无所知。您需要使用$ compile编译新添加的元素。你应该更好地使用指令来完成这项任务。

从控制器访问ui元素是一个坏习惯。

编辑:最好使用ng-repeat执行此任务。假设你有一个拇指画廊指令,它使用拇指数组的ng-repeat重复。

当您需要添加新图像时,只需将其添加到您的拇指阵列即可。 它简单明了

你的HTML看起来像

 <thumb-gallery ng-repeat="gallery in galleries"></thumb-gallery>

你的js看起来像

 var gallery = {};
 $scope.galleries.add(gallery);

答案 2 :(得分:3)

你必须compile与范围

试试这个

var item="<li><span class='img-del' ng-click='delThumbImgGallaryPhoto($event)'>X</span><img class='thumb-img' src='data:image/jpeg;base64,"+imageData+"'/></li>"
 $('.thumb-img-gallary').append(item);
$compile(item)($scope);